For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
我们在上文中给大家简单介绍了Java编程垃圾回收机制的一些常见类型等内容,而本文我们就继续来学习一下,Java编程垃圾收集器类型与用法分享。
1、Serial收集器
是一个单线程收集器,它“单线程”的意义并不仅仅说明它只会使用一个cpu或一条线程去完成垃圾回收工作。而是在收集垃圾时,暂停其他的工作线程。
新生代采用复制算法,stop-the-world(消除或者减少工作线程因内存回收而导致停顿)。
老年代采用标记--整理算法。
简单高效,client模式下默认的新生代收集器。
2、ParNew收集器
ParNew收集器是Serial收集器的多线程版本;
新生代采用复制算法,stop-the-world;
老年代采用标记--整理算法;
它是运行在server模式下选新生代收集器;
除了serial收集器之外,只能它能和cms收集器配合工作。
3、ParNewScanvenge收集器
类似ParNew,但是更加关注吞吐量。目标是:达到一个可控制吞吐量的收集器;
停顿时间和吞吐量不可能同时调优。我们一方面希望停顿时间少,另一方面希望吞吐量高,其实这是矛盾的。因为:在GC的时候,垃圾回收的工作量是不变的,如果停顿时间减少,那频率就会提高;既然频率提高了,说明就会频繁的进行GC,那吞吐量就会减少,性能就会降低。
4、G1收集器(核心重点)
是当今收集器发展的前沿成果之一,对垃圾回收进行划分优先级的操作,这种有优先级的区域回收方法保证了它的高效率;
大的优点是结合了空间整合,不会产生大量的碎片,也降低了进行GC的频率;
让使用者明确指定停顿的时间。
5、CMS收集器:(ConcurrentMarkSweep:并发标记-清除老年代收集器)
一种以获得短回收停顿时间为目标的收集器,适用于互联网网站或者B/S系统的服务器上;
初始化标记(stop-the-world):根可以直接关联到的对象;
并发标记(和用户线程一起):主要标记过程,标记全部对象;
重新标记(stop-the-world):由于并发标记时,用户线程依然运行,因此在正式清理前,再做修正;
并发清除(和用户线程一起):基于标记结果,直接清理对象。