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

More Related Content

PPT
Java垃圾收集原理
PPTX
Jvm memory
DOCX
Asistencia hdt
PPTX
Irvine_Eric_Ignite
PPTX
Trade show photo album
PPT
Jvm内存问题最佳实践
PDF
[Python.cookbook(第2版)中文版].(美)马特利,(美)阿舍尔.扫描版
PDF
Taobao 海量图片存储与CDN系统02
Java垃圾收集原理
Jvm memory
Asistencia hdt
Irvine_Eric_Ignite
Trade show photo album
Jvm内存问题最佳实践
[Python.cookbook(第2版)中文版].(美)马特利,(美)阿舍尔.扫描版
Taobao 海量图片存储与CDN系统02

Similar to Java内存管理 (20)

PPT
Java垃圾收集原理
PDF
Sun jdk 1.6内存管理 -使用篇-毕玄
PPT
JVM内容管理和垃圾回收
PDF
Java GC Tuning
PPT
Aswan&hump
PDF
Java线上应用问题排查方法和工具(空望)
PDF
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
PPT
Jvm内存管理基础
PPT
Large-Scale Cluster Mangement & Kubernetes Under The Hood
PPTX
Sun jdk 1.6内存管理 -使用篇
PDF
老舊web上雲端
PPTX
Mongodb Blockstore memory and system tuning
PDF
Lamp高性能设计
PDF
Jmm与map reduce简介
PPTX
Linux内存管理
PPTX
Linux内存管理
PDF
基于MySQL开放复制协议的同步扩展
PDF
GC算法和IE中JS内存泄露
PPTX
From Java Stream to Java DataFrame
PPTX
介紹前端 Web 技術在跨平台開發上的應用
Java垃圾收集原理
Sun jdk 1.6内存管理 -使用篇-毕玄
JVM内容管理和垃圾回收
Java GC Tuning
Aswan&hump
Java线上应用问题排查方法和工具(空望)
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Jvm内存管理基础
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Sun jdk 1.6内存管理 -使用篇
老舊web上雲端
Mongodb Blockstore memory and system tuning
Lamp高性能设计
Jmm与map reduce简介
Linux内存管理
Linux内存管理
基于MySQL开放复制协议的同步扩展
GC算法和IE中JS内存泄露
From Java Stream to Java DataFrame
介紹前端 Web 技術在跨平台開發上的應用
Ad

More from lovingprince58 (9)

DOCX
No sql数据库笔谈
PDF
Design Patterns For Distributed NO-reational databases
PDF
分布式Key-value漫谈
DOCX
Linux性能监控cpu内存io网络
PDF
淘宝软件基础设施构建实践
PDF
Google big table 中文版
PDF
[Python参考手册(第4版)].(美)比兹利.扫描版
PDF
Tomcat Optimisation & Performance Tuning
PPTX
Jetty服务器架构及调优.v2 2011-5
No sql数据库笔谈
Design Patterns For Distributed NO-reational databases
分布式Key-value漫谈
Linux性能监控cpu内存io网络
淘宝软件基础设施构建实践
Google big table 中文版
[Python参考手册(第4版)].(美)比兹利.扫描版
Tomcat Optimisation & Performance Tuning
Jetty服务器架构及调优.v2 2011-5
Ad

Java内存管理

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