[翻译]Java Garbage Collection Basics Java 垃圾回收基础 之4 分代的垃圾回收过程
2016-04-24 14:52
417 查看
分代的垃圾回收过程
现在我们知道了为什么堆被分为不同代,那么用一点时间来看看这些不同代之间是如何交付的.下面的这些图片描述了在JVM中.对象的分配和变老的过程.1.任何新创建的对象都在eden区分配,2个survivor都是空的.
2.当eden区满了,会触发一次minor gc
3.此时还被引用的对象会移到第一个Survivor区S0.清除Eden区时,未被引用的对象被删除
4.在下次minor gc时,在eden区发生同样的事情.未被引用的对象被清除,被引用的对象被移到survivor区.不同的是,在这种情况下,它们被移入第2个survivor区 S1.除此之外,上次MINOR GC在 S0中存活的对象,变老了,并被移入到S1.当所有存活的对象都被移入到S1后,S0和eden区被清空了.注意观察下图中不同动向如何变老的.
5.下次minor gc,同样重复上面的过程.但是survivor区被调换了.被引用的对象被移入到S0, 存活对象变老了.eden区和S1被清空了.
6.下图展示了”提升/晋升”过程.在一次minor gc执行完后,年老的对象达到了特定的年龄阈值(比如8),这些对象从年轻代晋升到年老代.(译注:可以通过JVM参数:-XX:MaxTenuringThreshold=8 设置.)
7.随着更多的minor gc,更多的对象会晋升到年老代.
8.接着更多的对象从年轻代晋升到老年代.最终触发一次major gc用于清除和压缩年老代.
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序