Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java内存管理

1,642 views

Published on

java内存管理

Published in: Technology
  • Be the first to comment

Java内存管理

  1. 1. Java 内存管理 Java Memory Management 淘宝市场产品技术部 - 增值业务组- 清虚
  2. 2. Overview <ul><li>Introduction </li></ul><ul><li>Garbage Collection Algorithm </li></ul><ul><li>Hotspot Generations </li></ul><ul><li>Garbage Collectors </li></ul><ul><li>Tuning Garbage Collection </li></ul>
  3. 3. Introduction <ul><li>内存管理涉及到的内容 </li></ul><ul><li>1 、分配内存 </li></ul><ul><li>2 、回收不可达对象的内存 </li></ul>
  4. 4. Introduction <ul><li>Explicit vs Automatic </li></ul>1 、悬挂指针 (dangling references) 2 、内存泄露 (space leaks)
  5. 5. Introduction Java 中内存分为堆内存和非堆内存。 GC 主要对以下工作负责: 1 、分配内存 2 、确保引用对象存在于内存中 3 、回收不可达对象的内存
  6. 6. Garbage Collection Algorithm <ul><li>copy 算法 </li></ul>root 优点:只访问活对象,收回内存算法简单,复制后,直接全部收回 缺点:如果活对象特别多,效率非常低,需要很多内存空间
  7. 7. Garbage Collection Algorithm <ul><li>mark-sweep 算法 </li></ul>root 优点:不用额外空间,就地收回空间 缺点:需要进行两次遍历,并且会产生碎片 , 导致内存分配效率下降
  8. 8. Garbage Collection Algorithm <ul><li>mark-sweep-compacting 算法 </li></ul>root 优点:不用额外空间,就地收回空间,整理后避免了内存碎片的产生 同时,同时提高了内存分配效率 缺点:因为需要整理内存,因此该算法增加了垃圾回收的时间
  9. 9. Garbage Collection Algorithm 应用中 GC 的 bottleneck 在哪里 ??? 特点:垃圾收集时应用需要暂停
  10. 10. Hotspot Generations <ul><li>生命周期特征:绝大多数对象死得很快 , 长寿对象非常少 </li></ul>
  11. 11. Hotspot Generations <ul><li>分代模型 </li></ul><ul><li>总共分为三代: Young 、 Tenured 、 Perm </li></ul>从 young 中活下来了再来我这里
  12. 12. Hotspot Generations <ul><li>Young GC: 针对 Young 进行垃圾收集,当 Young 空间申请失败时就进行 YGC 。 </li></ul><ul><li>采用 copy 算法 ,why??? </li></ul><ul><li>Full GC: 当 Tenured 或 Perm 空间申请失败时会进行 Full GC. Full GC 针对所有代,因此 </li></ul><ul><li>收集速度比较慢。采用标记 - 清除 / 整理算法 </li></ul>GC 分为两种类型: Young GC 、 Full GC
  13. 13. Hotspot Generations <ul><li>1 、绝大多数对象都首先在 Young 中申请内存 ( 某些大对象直接分配到 Tenured) </li></ul><ul><li>2 、在 young 经过了几次垃圾回收还活下来的对象才进入 Tenured </li></ul><ul><li>3 、 perm 中存放类、方法等 meta 信息 </li></ul>Young 包括了 1 个 Eden 和 2 个 survivor 空间,对象都是在 Eden 中进行 分配内存,经过至少一次 GC 后才进入 survivor 中。 Why?? 注: survivor 在任何时候都必须保持一个空间全部是空状态。
  14. 14. Garbage Collectors <ul><li>性能指标 </li></ul><ul><li>吞吐量 :应用运行的时间 </li></ul><ul><li>垃圾收集开销 :垃圾收集器运行的时间 </li></ul><ul><li>   暂停时间 : 垃圾收集器运行过程中程序被挂起的时间 </li></ul><ul><li>垃圾收集频率: 垃圾收集器运行的次数 </li></ul><ul><li>footprint : a measure of size </li></ul><ul><li>及时性 : 对象成为垃圾与此对象所占内存被回收间的时间 </li></ul>
  15. 15. Garbage Collectors <ul><li>串行收集器 ( Serial Collector ) </li></ul><ul><li>Young Generation GC: </li></ul>X X X X X Eden From To Old
  16. 16. Garbage Collectors <ul><li>串行收集器 ( Serial Collector ) </li></ul><ul><li>Old Generation GC: </li></ul>X X X 这里采用的标记 - 清除 - 整理算法
  17. 17. Garbage Collectors <ul><li>并行收集器 ( Parallel Collector ) </li></ul><ul><li>Young Generation GC: </li></ul>X X X X X Eden From To Old
  18. 18. Garbage Collectors <ul><li>并行收集器 ( Parallel Collector ) </li></ul><ul><li>Old Generation GC: </li></ul>X X X 这里采用的标记 - 清除 - 整理算法 ,仍然采用单线程方法与串行收集器一样。 注意:这里的并行是指 多线程并行复制,加快 YGC 复制速度,从而减少应 用停顿时间。
  19. 19. Garbage Collectors <ul><li>并行缩并收集器 ( Parallel compacting Collector ) </li></ul><ul><li>Young Generation GC: </li></ul><ul><li>与 Parallel collector 算法一致,多线程并行复制。 </li></ul>
  20. 20. Garbage Collectors <ul><li>并行缩并收集器 ( Parallel compacting Collector ) </li></ul><ul><li>Old Generation GC: </li></ul>
  21. 21. Garbage Collectors <ul><li>并行缩并收集器 ( Parallel compacting Collector ) </li></ul><ul><li>Old Generation GC: </li></ul>1. 标记阶段将 old 代分为固定大小的区域,并以多个强可达对象为起点分配给 多个线程,并行标记活动对象,并在活动对象所在的区域上记录对象的大小和位置 2. 汇总阶段 , 统计区域,标记哪些区域密度小的部分需要被回收 3. 整理阶段,将需要回收的部分活对象进行整理到左边其他区域,并清除其他区域
  22. 22. Garbage Collectors <ul><li>Concurrent Mark-Sweep (CMS) Collector </li></ul><ul><li>Young Generation GC: </li></ul><ul><li>与 Parallel collector 算法一致,多线程并行复制。 </li></ul>
  23. 23. Garbage Collectors <ul><li>Concurrent Mark-Sweep (CMS) Collector </li></ul><ul><li>Old Generation GC: </li></ul>1. 开始回收时,暂停应用程序,标记出强可达对象,然后应用程序和标记线程并发执行 2. 并发标记完毕,再次暂停所有应用程序,并行多线程重新标记没有标记到对象 3. 然后应用程序和垃圾回来线程并发执行 ( 不再进行整理,容易出现碎片 )
  24. 24. Tuning Garbage Collection 成也萧何败也萧何!!
  25. 25. Tuning Garbage Collection Java –jar –XX:+ 因此,参数主要分两类堆大小设置参数,算法选择参数 -XX:+<option> 开启某个功能 -XX:-<option> 关闭某个功能 -XX:<option>=<number> 设置某个选项代表的数量 -XX:<option>=<string> 设置某个选项代表的含义
  26. 26. Tuning Garbage Collection 1. 影响 VM 行为的参数 2. 影响
  27. 27. <ul><li>Q&A </li></ul>

×