我之前的文章介绍过GC的算法有标记-复制、标记-压缩等。也介绍到了GC工作时,堆内存中是如何进行复制与压缩的。现实情况中,JVM中是不断的有对象产生、灭亡的;这就对会GC行为中标记对象产生很大的冲突。总不能GC正标记对象呢,jvm里这些对象又一会儿活跃一会儿灭亡的。所以GC时,将会暂停jvm中的一切活动,直到垃圾回收完毕。也叫作 Stop the Wrold~
stop the world 现象一听就是个bug,肯定是要进行优化的。于是就有了这方面的改进,也就是针对GC收集器的优化。
一、收集器的种类
1、-XX:+UseSerialGC 使用串行收集器
号称最古老、最稳定的收集器。效率比较高,但是可能会产生比较长的停顿时间。
新生代与老年代都是用串行回收。新生代采用标记-复制,老年代选用标记-压缩。
2、PerNew 并行收集器
-XX:+UseParNewGC
新生代使用并行ParNew收集器、老年代使用Serial串行收集器。属于Serial收集器的并行版本。采用多线程的方式进行、自然需要多核的支持。
-XX:ParallelGCThreads 来限制线程的数量
使用此收集器jvm会提示:串行收集器有很大几率将在未来取消。