nullITeye - AG环亚娱乐集团

nullITeye

2019-01-13 09:53:39 | 作者: 凝丹 | 标签: | 浏览: 124

JVM发动参数共分为三类: 

        其一是规范参数(-),一切的JVM完成都必须完成这些参数的功用,并且向后兼容;          其二对错规范参数(-X),指的是JVM底层的一些装备参数,这些参数在一般开发中默许即可,不需求任何装备。但是在出产环境中,并不确保一切jvm完成都满意,所以为了进步功能,往往需求调整这些参数,以求体系到达最佳功能。                                            别的这些参数不确保向后兼容,也便是说“如有改变,恕不在后续版别的JDK告诉”(这是官网上的原话);          其三对错Stable参数(-XX),这类参数在jvm中是不稳定的,不适合日常运用的,后续也是或许会在没有告诉的情况下就直接取消了,需求稳重运用。 

 

Full GC         除CMS GC外,当旧生代和耐久化触发GC时,其实是对新生代、旧生代及耐久代都进行GC,因而一般又称为Full GC。         当Full GC被触发时,首要依照新生代所装备的GC办法对新生代进行GC(在新生代选用PS GC时,可经过-XX:-ScavengeBeforeFullGC来制止Full GC时对新生代进行GC),然后依照旧生代的GC办法对旧生代、耐久代进行GC。但其中有一种特别现象,如在进行Minor GC前,或许Minor GC后移到旧生代的目标多于旧生代的剩下空间,这种情况下Minor GC就不会履行了,而是直接选用旧生代的GC办法来对新生代、旧生代及耐久代进行收回。  除System.gc,触发Full GC的情况

1) 旧生代空间缺乏

    旧生代空间只要在新生代目标转入及创立为大目标、大数组时才会呈现缺乏的现象,当履行Full GC后空间依然缺乏,则抛出如下过错:

    java.lang.OutOfMemoryError: Java heap space 

   为防止以上两种情况引起的Full GC,调优时应尽量做到让目标在Minor GC阶段被收回、让目标在新生代多存活一段时间及不要创立过大的目标及数组。

2) Perman Generation空间满

    Perman Generation中寄存的为一些class的信息等,当体系中要加载的类、反射的类和调用的办法较多时,Perman Generation或许会被占满,在未装备为选用CMS GC的情况下会履行Full GC。假如经过Full GC依然收回不了,那么JVM会抛出如下过错信息:

    java.lang.OutOfMemoryError: PermGen space 

    为防止Perm Gen占满形成Full GC现象,可选用的办法为增大Perm Gen空间或转为运用CMS GC。

3) CMS GC时呈现promotion failed和concurrent mode failure

    关于选用CMS进行旧生代GC的程序而言,特别要注意GC日志中是否有promotion failed和concurrent mode failure两种情况,当这两种情况呈现时或许会触发Full GC。

    promotion failed是在进行Minor GC时,survivor space放不下、目标只能放入旧生代,而此刻旧生代也放不下形成的;

    concurrent mode failure是在履行CMS GC的过程中一起有目标要放入旧生代,而此刻旧生代空间缺乏形成的。

    应对措施为:增大survivor space、旧生代空间或调低触发并发GC的比率,但在JDK 5.0+、6.0+的版别中有或许会因为JDK的bug29导致CMS在remark结束后好久才触发sweeping动作。

    关于这种情况,可经过设置-XX: CMSMaxAbortablePrecleanTime=5(单位为ms)来防止。

4)  计算得到的Minor GC晋升到旧生代的均匀巨细大于旧生代的剩下空间

    这是一个较为杂乱的触发情况,Hotspot为了防止因为新生代目标晋升到旧生代导致旧生代空间缺乏的现象,在进行Minor GC时,做了一个判别,假如之前计算所得到的Minor GC晋升到旧生代的均匀巨细大于旧生代的剩下空间,那么就直接触发Full GC。

    例如程序第一次触发Minor GC后,有6MB的目标晋升到旧生代,那么当下一次Minor GC发作时,首要查看旧生代的剩下空间是否大于6MB,假如小于6MB,则履行Full GC。

     当新生代选用PS GC时,办法稍有不同,PS GC是在Minor GC后也会查看,例如上面的比如中第一次Minor GC后,PS GC会查看此刻旧生代的剩下空间是否大于6MB,如小于,则触发对旧生代的收回。

除了以上4种情况外,关于运用RMI来进行RPC或办理的Sun JDK使用而言,默许情况下会一小时履行一次Full GC。

可经过在发动时经过- java -Dsun.rmi.dgc.client.gcInterval=3600000来设置Full GC履行的间隔时间

经过-XX:+ DisableExplicitGC来制止RMI调用System.gc

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章