IT序号网

jvm 之各种参数及表达的意思

sanshao 2021年06月11日 编程语言 371 0

        内存相关设置
        -Xms:初始堆(Heap)大小
        -Xmx:最大堆(Heap)大小
        -Xmn:堆里面young区的大小新生代大小,Oracle建议设置为整个堆大小的1/4到1/2。
        -Xss:设置每个线程栈的大小。Java1.5 以后每个线程栈默认大小为1M,之前每个线程栈默认大小为256K。可以根据应用的线程所需内存大小进行调整。一般情况下默认值已经能满足绝大部分情景的应用,如果想更进一步优化则需要非常细致的测试。在相同物理内存下,减小这个值能生成更多的线程,进程中可容纳线程数量与很多因素有关,感兴趣的可以详细了解下,据说可以达到6500个以上。

        -XX:MinHeapFreeRatio=40:如果发现空闲堆内存占到整个预估上限值的40%,则增大上限值。
        -XX:MaxHeapFreeRatio=70:如果发现空闲堆内存占到整个预估上限值的70%,则收缩预估上限值。
        -XX:NewRatio=2:设置年轻代和老年代的比值。例如:n=3,则表示年轻代与老年代比值为1:3,年轻代占整个年轻代与老年代之和的1/4。
        -XX:SurvivorRatio=8:Eden 与Survivor 的占用比例。例如8表示,一个survivor 区占用 1/8 的Eden 内存,即1/10的新生代内存,此处需注意年轻代有2个survivor 区,所以比例为1:10。
        -XX:TargetSurvivorRatio=50:实际使用的survivor 空间大小占比。默认是47%,最高90%。
        -XX:MaxPermSize=64m:设置持久代(即方法区)占整个堆内存的最大值。
        -XX:MaxTenuringThreshold=0:设置对象最大年龄。即对象在在Eden 与Survivor 区之间被复制的次数,每被复制一次就增加1岁,默认值为15。如果设置为0的话,则Eden 中对象不经过Survivor 区直接进入老年代。

        收集器设置
        -XX:-DisableExplicitGC:禁止在运行期显式地调用System.gc(),开启该选项后,GC 的触发时机将由Garbage Collector 全权掌控,默认:关闭。
        -XX:+ScavengeBeforeFullGC:在Full GC前触发一次Minor GC,默认:启用。
        -XX:+UseGCOverheadLimit:限制GC的运行时间。如果GC耗时过长,就抛OutOfMemoryError。
        -XX:ParallelGCThreads=n:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
        -XX:+UseTLAB:启用线程本地缓存区(Thread Local)。
        -XX:+UseSerialGC:使用串行收集器。
        -XX:+UseParallelGC:使用并行收集器。
        -XX:+UseParallelOldGC:使用并行压缩收集器。
        -XX:+UseConcMarkSweepGC:使用CMS 收集器。

        -XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩. 
        -XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩

        G1收集器设置
        -XX:+UseG1GC:使用G1收集器。
        -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间,这是一个理想目标,JVM 将尽最大努力来实现它。

        GC 日志设置
        -XX:+PrintGC:开启GC日志打印。
        -XX:+PrintGCDetails:打印GC回收的详细信息。
        -XX:+PrintGCTimeStamps:打印GC停顿耗时。 
        -Xloggc:<filename>:输出GC 详细日志信息至指定文件。
        -XX:+UseGCLogFileRotation:开启GC 日志文件切分功能,前置选项 -Xloggc。
        -XX:NumberOfGClogFiles=1:设置切分GC 日志文件数量,文件命名格式:.0, .1, ..., .n-1。
        -XX:GCLogFileSize=8K:GC日志文件切分大小。

在HotSpot JVM 中有三种概念,分别代表了不同代中发生的GC 动作。
        Minor GC:指发生在新生代的垃圾收集动作,由于新生代中对象生命周期较短,更新速度迅速,所以Minor GC 也会比较频繁,Minor GC 的回收速度也比较快。Minor GC 通常使用copying 算法,此算法一般为最有效的。
        Major GC:指发生在老年代或永久代的垃圾收集动作,出现了Major GC,通常会伴随至少一次的         Minor GC(但有的收集策略会只有Major GC)。MajorGC 的速度一般会比比较慢。

        Full GC:指对堆内存整体进行垃圾收集(包含新生代,老年代,永久代),有时可以理解为仅是Major GC,又可以理解为Major GC + Minor GC,因为概念理解上的差异我们理解Full GC 为清理所有内存即可。

时过境迁,其中也许有的分区都不在了,上面仅供参考吧。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!