效率 复制 > 整理 > 清除
内存整齐度 复制 = 整理 > 清除
内存利用率 整理 = 清除 > 复制
? 1、虚拟机栈中的引用的对象。
? 2、方法区中的类静态属性引用的对象。
? 3、方法区中的常量引用的对象。
? 4、本地方法栈中JNI的引用的对象
普通GC(minor GC):只针对新生代区域的GC。****全局GC(major GC or Full GC):针对年老代的GC
年龄阈值
VM为每个对象定义了一个对象年龄(Age)计数器, 对象在Eden出生如果经第一次Minor GC后仍然存活, 且能被Survivor容纳的话, 将被移动到Survivor空间中, 并将年龄设为1. 以后对象在Survivor区中每熬过一次Minor GC年龄就+1. 当增加到一定程度(-XX:MaxTenuringThreshold, 默认15), 将会晋升到老年代.
提前晋升: 动态年龄判定
然而VM并不总是要求对象的年龄必须达到MaxTenuringThreshold才能晋升老年代: 如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半, 年龄大于或等于该年龄的对象就可以直接进入老年代, 而无须等到晋升年龄.
java堆内存分为大小相等独立的Region
CMS(Conrrurent Mark Sweep)收集器是以获取最短回收停顿时间为目标的收集器。使用标记 - 清除算法,收集过程分为如下四步:
其中,并发标记与并发清除两个阶段耗时最长,但是可以与用户线程并发执行。
关注线程状态
原文:https://www.cnblogs.com/albertXe/p/14823435.html