3、标记—整理算法
4、分代收集算法
HotSpot算法实现GC
枚举根节点:逐个检查;(Stop The World,GC执行时必须停顿所有Java执行线程)
在OopMap协助下,HotSpot可以快速并准确地完成枚举。
安全点:只有在安全点才能停顿开始GC
安全区域:安全点的扩展,在安全区域可以停顿开始GC
垃圾收集器:内存回收的具体实现。
GC日志
GC常用参数
内存分配策略
1、对象优先在Eden分配:新生代GC(Minor GC)、老年代GC(Major GC/Full GC)
2、大对象直接进入老年代:
3、长期存活的对象将进入老年代:给每个对象定义一个年龄(Age)计数器。对象在Eden出生并经过第一次Minor GC后仍然存活,并且能被Survicor容纳的话,将被移动到Survivor空间,并对象年龄设为1。对象在Survivor中每“熬过”一次Minor GC,年龄就增加1,当年龄增加到一定程度(默认15),晋升到老年代中。
4、动态对象年龄判定:虚拟机并不是永远要求对象年龄到一定程度才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代。
5、空间分配担保:老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小就会进行Minor GC,否则将进行Full GC。
工具
JDK1.5中,getAllStackTraces()用于获取虚拟机中所有线程的StackTraceElement对象。
HSDIS:JIT生成代码反汇编。
JConsole:Java监视与管理控制平台,基于JMX。
VisualVM:多合一故障处理工具