一、概述
新生代与老年代进行垃圾回收时,会使用不同的垃圾回收期。这里举出常用的垃圾回收器。如图:
基本概念与关键点
1:常见的垃圾 回收器有上面七种 Serial、ParNew、ParallerScavenge、Serial 0ld 、 Paraller Old、CMS ,G1 . 其中Serial、ParNew、ParallerScavenge多发生在年轻代,Serial 0ld 、 Paraller Old、CMS发生在老年代。G1均有可能发生。
2:stop-the-world:JVM要执行GC而临时停止应用程序的执行;任何一种GC算法中都会发生;GC可以通过优化stop-the-world发生时间来提高程序性能
3:jvm运行模式:server:采用重量级jvm启动慢,稳定后快,client:采用轻量级jvm
4:老年代与新生代收集器可以搭配使用,按照上图连线为例。
5:可通过jvm参数配置使用哪张收集器。如:
-XX:+UseSerialGC
-XX:+UseParNewGC
-XX:+UseParallelGC
6:safepoint (安全点):假如一边清理垃圾,一边丢垃圾,这种情况是混乱且不可取的。应该定义清理垃圾的时间点,不能丢垃圾。
安全点:GC算法能够分析对象的时间点。
安全点设置过多,会影响程序执行效率,设置过少,会增加GC等待时间。
二、新生代收集器
1:serial收集器
-
serial收集器:单线程收集,垃圾收集时必须暂停其他线程,简单高效,client下默认的年轻代收集器(复制算法,-XX:+UseSerialGC)
2、ParNew收集器
-
ParNew收集器:多线程,其余特点和serial一样,server模式下jvm首选年轻代收集器,多核有优势(复制算法,暂停其他线程,-XX:+UseParNewGC)
3、ParallelScavenge收集器
-
ParallelScavenge收集器:比起用户停顿时间,更关注系统吞吐量;多核有优势,server模式下默认年轻代收集器(-XX:+UseParallelGC,复制算法,暂停其他线程)(-XX:+UseAdaptiveSizePolicy ,自适应调节策略)
吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)