1.JVM中不同的垃圾回收器
2.穿行、并行、并发垃圾回收器概述
1.按照分代收集的方式,把垃圾回收器做如下的划分:
a)新生代收集器:Serial 、ParNew、Parallel Scavenge
b)老年代收集器:CMS、Serial Old、Paralled Old
c)新生代和老年代都可以使用的:G1
详细内容:JVM垃圾回收器介绍
2.Stop the world:所谓的Stop the World机制,简称STW,即在执行垃圾收集算法时,Java应用程序的其他所有除了垃圾收集收集器线程之外的线程都被挂起。此时,系统只能允许GC线程进行运行,其他线程则会全部暂停,等待GC线程执行完毕后才能再次运行。这些工作都是由虚拟机在后台自动发起和自动完成的,是在用户不可见的情况下把用户正常工作的线程全部停下来,这对于很多的应用程序,尤其是那些对于实时性要求很高的程序来说是难以接受的。但是有些时候对于虚拟机来说采用Stop the world机制是无法避免的,例如采用复制算法时,为了保证在复制存活的对象的时候,对象的一致性,不然要使应用程序被挂起。但是随着Java虚拟机的发展,HotSpot虚拟机团队为达到更好用户体验而一直进行着努力,不断的对垃圾收集器进行着改进,随着JDK的版本的不断更新,更好的垃圾收集器的出现,用户线程的停顿时间也在不断缩短,虽然这一时间现阶段仍然不能消除,但相信不久的未来一定会有更好的垃圾收集器被发现,从而完全达到用户对于虚拟机垃圾回收的性能要求。
3.对于很多的垃圾收集器来说,都会采用Stop the World机制来进行垃圾回收。具体来讲,在Java虚拟机的Serial, ParNew, Parallel Scanvange, ParallelOld, Serial Old全程都会Stop the world,JVM这时候只运行GC线程,不运行用户线程。而CMS主要分为 initial Mark, Concurrent Mark, ReMark,Concurrent Sweep等阶段,initial Mark和Remark占整体的时间比较较小,它们会Stop the world。 Concurrent Mark和Concurrent Sweep会和用户线程一起运行。虽然CMS减少了stop the world的次数,不可避免地让整体GC的时间拉长了。
1.串行:jvm GC时存在一个线程
2.并行:jvm gc时有多个线程,用多个cpu或者core同时执行垃圾回收,优点是提高了吞吐量。但是由于线程切换占用了时间,所有并行并不一定比串行好。两者都基于stop the world。
3.并发:不用停止任务,可以在gc时,任务同时运行。由此提高了效率,增加了用户体验。
联系客服