JVM垃圾收集简介

当JVM自动垃圾回收成为JVM的瓶颈时,就需要进行合理的配置参数进行垃圾回收。

常用的垃圾回收的算法:引用计数法,根搜索算法。

引用计数法:到引用指向堆中创建的对象的时候,引用计数加1,取消指向的时候,引用技术减1。但是存在对象引用互相指向的情况,这样垃圾不能回收,即使对象没有引用指向,这是的引用计数器仍然是1.

根搜索算法: 当对象到GC Roots没有引用链相连,代表 这个对象可以被垃圾回收。

垃圾回收算法:标记清除法,复制算法,标记-整理算法,分代垃圾回收算法。

标记清除算法:标记出需要清除的对象,在标记完成之后统一清除掉这些对象。存在的问题:效率不是很高  容易在堆中产生碎片。

复制算法:在商业的虚拟机中,把堆中的内存分为Eden和两个Survivor,每次使用一个Eden和一个Survivor,当需要垃圾回收时,把Eden和Survivor中存活的对象复制到一个Survivor空间上,清理掉Eden和Survivor上的死亡了的对象。

标记-整理算法:将所有的存活的对象往一端移动,清理掉端之外的对象。

垃圾收集器:Serial收集器,ParNew收集器,Parallel Scavenge收集器 ,Serial Old收集器,Parallel Old收集器,CMS收集器,GI收集器

Serial收集器:单线程的收集器,简单而高效。

ParNew收集器:多线程的新生代垃圾收集器

Parallel Scavenge收集器:使用复制算法,多线程,新生代,可控吞吐量适合后台运算的垃圾收集器。

Serial Old收集器:使用标记-整理算法单线程的老年垃圾收集器。

Parallel Old收集器:使用标记-整理算法多线程的老年垃圾收集器。

CMS收集器:并发收集,低停顿的垃圾收集器,使用标记清除算法。具有标记整理算法的缺点。

GI收集器:基于标记整理算法,可以很好的控制停顿,对垃圾回收具有优先级别。

内存分配策略:对象 优先在 Eden上分配,大对象直接进入老年代,长期存活的对象进入老年代 ,动态年龄判定。

posted on 2017-04-01 15:28  hudashu  阅读(91)  评论(0编辑  收藏  举报

导航