首页 > 编程知识 正文

安卓cms怎么用(cms商店)

时间:2023-05-04 23:18:50 阅读:96314 作者:2461

上一篇文章已经分析了

引言

JVM的垃圾收集机制(JVM内存分配和收集机制),但是真正实现垃圾收集的是垃圾收集器。本文主要结合《深入了解JAVA虚拟机》书中的内容和我个人的理解,分析了目前市场上常用的垃圾收集器的优缺点,并给出了各个垃圾收集器适配的业务场景,这是未来GC调优不可或缺的一步。

常用的垃圾收集器

到目前为止,还没有完美的垃圾收集器,也没有通用的垃圾收集器。我们只能对比各个垃圾收集器的优缺点,根据具体的业务场景选择最接近业务的垃圾收集器。常用的垃圾收集器如下:

Serial collector:开篇参数为-xx3360 useSerialgc-xx3360 useserailoldgc,Serial是一个串行垃圾收集器。serial收集垃圾时,只会启动一个垃圾收集进程,其他所有进程都会暂停,清理垃圾。优点:简单高效,线程间无交互,单线程收集效率非常高。用途:感觉像是真正意义上的《停止世界》。一般这个收集器和其他收集器一起使用,或者作为CMS收集器的替代恢复算法:atgdrg的生成采用复制算法。旧社会采用的是标签排序算法ParNew collector:开篇参数为-XX:UseParNewGC。parnew collector只是一个多线程版本的串行收集器。除了使用多线程进行垃圾收集,其他回收算法、收集算法等方面与searial有着相同的优势:当内存空间较大时(线程间的切换成本远低于多线程垃圾收集节省的时间),垃圾收集效率比SEARL更高:一般情况下,Parallel cleaner collector与CMS collector配合使用:when参数为-xx3360 useparallel lgc,Parallel cleaner collector的垃圾收集方式与parnew类似,但与parnew相比,Parallel cleaner collector的CPU利用效率大大提高。也就是说吞吐量有了质的提升:CPU中运行用户代码的时间与CPU总消耗时间之比的优势:提供了很多参数帮助用户找到最大吞吐量,如果我们更注重吞吐量的话,Parallel Sweeping是一个不错的选择和恢复算法:atgdrg使用复制算法,old age使用标签排序算法

并联扫气收集器工作示意图

CMS采集器(键):开启参数为-XX : useConcMarkswepgc。收集器的设计是为了缩短GC导致的暂停时间,从而提高用户体验。cms collector的独特之处在于它可以让垃圾收集线程和业务线程同时工作。同时,cms collector为开发者提供了大量的参数,让cms在不断的参数优化后逐渐提升用户体验的优势:并发收集垃圾,用户线程暂停时间短。cms收集器回收的详细步骤:初始标记:所有线程将在此阶段暂停。标记GC Root直接引用的对象(这是cms的聪明之处,只标记GC Root直接引用的对象,而不收集GC Root相关的所有图像,大大减少了对象的标记时间)。并发标记:此时业务线程和GC线程会同时启动,GC线程会标记所有与初始标记对象相关的对象,业务线程可以保证正常的业务流程。当然,由于此时业务线程正在正常运行,不可能在并发标记时,对这段时间产生的垃圾对象进行标记,并及时分析对象的可达性。但是并发标记算法会对引用更新发生的地方进行重新标记:在这个阶段会暂停所有线程,以纠正并发标记阶段业务线程操作导致的对象引用更新,但是这个阶段暂停线程的时间比并发标记阶段要长。非常短的并发清理:启动业务线程并同步启动垃圾收集的gc线程。cms的缺点:不难看出cms的回收步骤。cms的缺点很明显。它会跟业务线程抢资源,对CPU资源要求高的并发清理造成的垃圾无法清理。回收算法只能清理到下一次GC。这种算法会导致大量的内存空间碎片。如果需要避免这种情况,可以打开参数-xx3360 usecmscopataftullcollection,让JVM对清理后的活对象进行排序,但是打开这个参数会稍微影响垃圾收集的效率和执行过程的不确定性。在并发清理过程中,由于业务线程连续运行,可能会再次占用旧空间。如果发生这种情况,cms将立即停止jvm上的世界,并将其更改为用于垃圾收集的串行收集器。为了防止这种情况的发生,有必要在系统运行过程中不断优化CMS参数,以最大限度地减少这种情况的发生。

CMS垃圾收集器的运行机制

CMS收集器参数:-xx3360 useconcmarkswepgc:是否打开CMS-xx: congcthreads:CMS:CMS中并发gc线程的数量。该参数应根据机器的配置和具体业务-xx3360进行设置。

+UseCMSCompactAtFullCollection:full gc后进行内存碎片整理,达到减少内存碎片的效果-XX:CMSFullGCsBeforeCompaction:当开启了 UseCMSCompactAtFullCollection 参数后,通过此参数设置,设置多少次full gc后,进行内存整理工作,默认值为0,即每次full gc后都会进行碎片整理-XX:CMSInitiatingOccupancyFraction:使用cms收集器,设置触发full gc 的老年代内存占比阈值,默认为92,即老年代内存占用达到92%就会触发full gc-UseCMSInitiatingOccupancyOnly:此参数在开启CMSInitiatingOccupancyFraction参数后生效,因为jvm在每次gc后,会自动调整老年代内存阈值,如果此参数开启,则会一直使用CMSInitiatingOccupancyFraction参数配置的阈值,不会自动调整-XX:+CMSScavengeBeforeRemark:在full gc前开启一次minor gc

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。