Jvm垃圾收集算法
标记-清除
标记-清除算法是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象
标记-整理
根据老年代的特点提出标记-整理算法。它在标记-清除算法的基础上做了一些优化。和标记-清除算法一样,标记-整理算法也首先需要从根节点开始,对所有可达对象做一次标记。但之后,它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。
复制算法
新生代回收算法。将原有的内存空间分为三块,一块较大的Eden空间和两块较小的Survivor空间。每次使用Eden和一块Survivor。当对象回收时把存活的对象复制到另外一块Survivor空间。如果空间不够则直接进入老年代。
分代思想
依据对象的存活周期进行分类,短命对象归为新生代,长命对象归为老年代。
根据不同代的特点,选取合适的收集算法
少量对象存活,适合复制算法
大量对象存活,适合标记清理或者标记压缩
Stop-The-World
Java中一种全局暂停的现象
全局停顿,所有Java代码停止,native代码可以执行,但不能和JVM交互
多半由于GC引起
Dump线程
死锁检查
堆Dump
程序不断运行就有垃圾产生,大家就都得停下来,等收集完了,大家继续干活。让大家都停下来,时间长了肯定会不爽。
by ppf@jiumao.org