其他分享
首页 > 其他分享> > JVM-垃圾回收(2)

JVM-垃圾回收(2)

作者:互联网

回收算法补充——分代回收

实际的JVM并不会单独的使用一种算法,分代回收的垃圾回收机制就体现了这一点。
JVM将堆内存划分为两个区域——新生代老年代

分代


而新生代又细分为 伊甸园、幸存区From、幸存区To

新创建的对象放在伊甸园,当伊甸园无法再放入对象时就会产生垃圾回收
新生代的垃圾回收,我们称为 Minor GC
新生代的垃圾回收采用复制的方法,将存活的对象复制到 幸存区To
同时让幸存的对象存活次数+1
完成一次 Minor GC 后 幸存区From和幸存区To会交换一次位置(指向发生变化,让幸存区To为空的状态)
当下一次垃圾回收的时候,幸存区的对象也会被判断是否回收


当然,幸存区的对象不会一直呆在幸存区,当其存活次数超过一个阈值(默认 15)他就会被移动到老年代中
老年代的空间也有不足的时候,当新生代无法触发回收,老年代的空间也不足的时候就会产生垃圾回收
老年代的垃圾回收,我们称为 Full GC
老年代使用标记 - 清除 或者 标记 - 整理 算法进行垃圾回收


触发Minor GC和Full GC时会引发Stop the World
意思是在新生代和老年代垃圾回收时,其它用户线程必须停止直到垃圾回收过程完成


相关JVM参数

含义 参数
堆初始大小 -Xms
堆最大大小 -Xmx 或 -XX:MaxHeapsize=size
新生代大小 -Xmn 或 (-XX:Newsize=size +-XX:MaxNewSize=size)
幸存区比例(动态) -XX: Initial SurvivorRatio=ratio Al -XX:+UseAdaptiveSizePolicy
幸存区比例 -XX:SurvivorRatio=ratio
晋升阈值 -XX:Max Tentring Threshold-threshold
晋升大小 -XX:+PrintTenuringDistribution
GC详情 -XX:+PrintGCDetails-verbose:gc
Full GC 前 Minor GC -Xx:+ScavengeBeforeFullGC

垃圾回收器

串行垃圾回收器

-XX:+UserSerialGC = Serial + SerialOld

吞吐量优先垃圾回收器

-XX:+UseParallelGc ~ -XX:+UseParallelOldGC

吞吐量优先


响应时间优先垃圾回收器

- XX:+UseConcMarkSweepGC ~ -XX:+UseParNewGC ~ SerialOld

响应时间优先

过程解释:

标签:标记,幸存,回收,XX,GC,垃圾,JVM
来源: https://www.cnblogs.com/S2Jgogo/p/16223710.html