持续创作,加速成长!这是我参与「日新计划 6 月更文挑战」的第23天,点击查看活动详情

前言:新生代的收集器有:Serial,ParNew,Parallel Scavenge等。老年代有:CMS,SerialOld,Paraller Old等。接下来将深入理解各个垃圾收集器的原理,以及它们如何在不同多线程是什么意思场景下进行搭配使用。 同时,先解释几个名词: 1,并行(Parallel算法是指什么):多个垃圾收集线程并行工作,此时用户线程处于等待状态 2,并发(Concurrent):用户线程和垃圾收集线线程和进程的区别是什么程同时执行 3,吞吐量:运行用户代码时间/(运行用户代码时间+垃圾回收时间)

(一) 新生代的收集器们

(1)算法工程师 ParNew 这是Serial收集器的多线程版本,使用多线程对垃圾收集,采用复制算法,同时需要暂时所有用户线程。除了使用多线程其他与Serial收集器相比并没有什么创新。但是为什么还要虚拟机是什么意思学习它,那是因为除了Serial收集器,目前只有它能与CMS收集器配合工作。因此我们在Server中虚拟机首选项的新生代收集器还是它。可以使用的控制参数有:-XX:线程池SurvivorRatio,-XX线程池面试题:PretenureSizeThreshold,-XX:HandlerPromotionFailure等(详情见官方手册)。

(2多线程并发) Parallel Scavenge收集器 使用复制算法,同时也是并行收集器,相比ParNew,它更关注于达到一个可控制的吞吐量。高吞吐量可以高效率地利用CPU时间,尽快完成计算任务。所以这个收集器适合在后台运算而不需要很多交互的任务。接下来看看两个用于准备控制吞吐量的参数 1,-XX:MaxGCPauseMi线程撕裂者lls(控制最大垃圾收集的时间) 设置算法是指什么一个大于0的毫秒数,收集器尽可能地保证内存回收不超过设定值。但是并不是设虚拟机安装教程置地越小就越快。GC停顿时间缩短是以缩短吞吐量和新生代空间来换取的。 2,-XX:GCTimeRatio(设置吞吐量大小) 设置算法的五个特性一个0-100的整数,也就是垃圾收集时间占总时间的比率线程,相当于吞吐量的倒数。

(二) 老年队的收集器们

(1) Se算法工程师rial Old 是Serial收集器的老年队版本,也是一个单线程收集器,使用标记-整理算法。这个收集器主要在于给Client模式下的虚拟机使用。如果在Server多线程应用场景例子中,主要用途是:1,在JDK1.5前和Parallel Scaven多线程下载ge搭配使用。2,作为Concurrent Mode Fai多线程是什么lure时候使用。

(2)Parallel Old线程的几种状态 这是Paral线程安全ler Scanvenge收集器的老年队算法的时间复杂度取决于收集器,使用标记-整理方式。在这个方式没有产生之前,Para多线程并发llel Scavenge只能选择Serial Old。由于被拖了后腿,那么Parallel Scavenge并不能在整体上获取吞吐量最大化的效果。甚至比不上CMS+ParNew的算法是指什么吞吐量。

(3)线程和进程的区别是什么CMS收集器 这是一个以获取最短回收停顿时间为目标的并发收集器。对于重视服务响应时间,希望系统停顿时间尽可能短的,那么CMS线程是什么意思就非常符合了。CMS收集器采用标记-清除实现。包括了四个步骤 1,初始标记:简单标记下GC Roots能直接关算法的有穷性是指联到的对象,需要“Stop虚拟机是什么意思 The Worl算法的空间复杂度是指d“ 2,并线程的几种状态发标记:进行GC Roots Tracijs单线程ng 3,重新标记:修正并发标记期间用户程序继续算法的特征运行而导致标线程的几种状态记发生变动那一部分对 象标记记录,需要“Stop The World“ 4,并发清除

缺点: 1,无法处理浮动垃圾。由于并发清理阶段用户线程还在运行,程序多线程应用场景例子自然会有新的垃圾产生,那么CMS将无法在这次收集中处理掉它们。只能等待下次GC再清理。由于垃圾回收阶段用户线多线程的应用场景程还需要运行。那么就需要预留足够的内存空间给用户线程使用,所以CMS不能等待老年队几乎完全快满了再进行收集。需要预留一部分空间提供并发收集时候的程序使用。如果运行期间预留的内存无法满足程序需要,那么就会出现“Concurrent Mode Failure“,这时候就启用Serial Old收集器进行老年代的收集。

2,对CPU资源敏感。在并发阶段虽然不会导致用户线程停顿,但是会因为占用一部分算法的有穷性是指线程(或者说CPU资源单线程的人是啥意思)而导致应用程序变慢,吞吐量降低,默认是启动(CPU数量+3)/4的线程数多线程下载

3,会产生大量的空间碎片。CMS是基于标记-清除算法实现的,那么收集结虚拟机是什么意思束时候会有大量空间碎片产生。这个时候就会给大对象分配带来麻烦,因为无法找到足够大的连续空间来分配多线程的实现方式当前对象,不得不提前触发一次Full GC。那么我们可以使用:-XX:+UseCMSCompactAtFullC算法的时间复杂度取决于ollection,在CMS收集器顶不住要进行FullGC时候开启内存碎片的合并整理过程,但是会加长停顿时间。还有一个参数 -XX:CMSFullGCsBeforeComp算法的空间复杂度是指action,表示用于设置执行多少次不压缩的Full GC后,跟着来一次带压缩的。

(三) 垃圾收集器选择的策略

(1) 吞吐量优先的并行收集器 参数配置: 1, -Xmx4g -Xms4g -Xmn2g -Xss200k -XX:+UseParallelGC -XX:ParallelGCThreads=8 说明:选择Parallel Scavenge收集器,然后配置多少个线程进行回收,最好与处理器数目相等。

2,-Xmx4g -Xms4g -Xmn2g -Xss200k -XX虚拟机是什么意思:+UseParallelGC -XX:ParallelGCT虚拟机的危害hreads=8 -XX:+UseParallelOldGC 说明:配置老年代使用Parallel Old

3,-Xmx4g -Xms4g -Xmn2g -Xss200k -XX:+UseParallelGC -XX:MaxGCPauseMills=100 说明:设置每次年轻代垃圾回收的最长时间。如何不能满足,那么就会调整年轻代大小,满足这个线程安全设置

4,-Xmx4g -Xms4g -Xmn2g -Xss200k -XX线程数越多越好吗:+UseParallelGC -XX:MaxGCPauseMills=100 -XX:+UseAdaptiveSizePolicy 说明:并行收集器会自动选择年轻代区大小和Survivor区的比单线程的人例。

(2)响应时间优先的并发收集器 1, -Xmx4g -Xms4g -Xmn2虚拟机g -Xss200k -XX:+UseConcM线程池的七个参数arkSweepGC -XX:+UseParNewGC 说明:设置老年代的收集器是CMS,年轻代是ParNew

2,-Xmx4g -Xms4g -Xmn2g -Xss200k -XX:+虚拟机的危害UseConcMarkSweepGC -X算法的特征X:CMSFullGCsBeforeCompaction=5多线程并发中线程的状态 -XX:多线程的应用场景+Ujs单线程seCMSCompactAtFullColle线程撕裂者ction 说明:首先设置运行多少次GC后对内存空间进行压缩,虚拟机怎么使用整理。同时打开对年老代的压缩(会影响性能)