JVM提供了諸多的參數(shù)進行JVM各個方面內(nèi)存大小的設(shè)置,為Java應(yīng)用進行優(yōu)化提供了諸多的工具,本文將會詳細(xì)分析各個參數(shù)的功能與使用。
常見參數(shù)配置
//堆設(shè)置
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:設(shè)置年輕代大小
-XX:NewRatio=n:設(shè)置年輕代和年老代的比值.如:為3,表示年輕代與年老代比值為1:3,年輕代占整個年輕代年老代和的1/4
-XX:SurvivorRatio=n:年輕代中Eden區(qū)與兩個Survivor區(qū)的比值.注意Survivor區(qū)有兩個.如:3,表示Eden:Survivor=3:2,一個Survivor區(qū)占整個年輕代的1/5
-XX:MaxPermSize=n:設(shè)置持久代大小
//收集器設(shè)置
-XX:+UseSerialGC:設(shè)置串行收集器
-XX:+UseParallelGC:設(shè)置并行收集器
-XX:+UseParalledlOldGC:設(shè)置并行年老代收集器
-XX:+UseConcMarkSweepGC:設(shè)置并發(fā)收集器
//垃圾回收統(tǒng)計信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
//并行收集器設(shè)置
-XX:ParallelGCThreads=n:設(shè)置并行收集器收集時使用的CPU數(shù).并行收集//線程數(shù).
-XX:MaxGCPauseMillis=n:設(shè)置并行收集最大暫停時間
-XX:GCTimeRatio=n:設(shè)置垃圾回收時間占程序運行時間的百分比.公式為1/(1+n)
//并發(fā)收集器設(shè)置
-XX:+CMSIncrementalMode:設(shè)置為增量模式.適用于單CPU情況.
-XX:ParallelGCThreads=n:設(shè)置并發(fā)收集器年輕代收集方式為并行收集時,使用的CPU數(shù).并行收集線程數(shù).
在實際工作中,我們可以直接將初始的堆大小與最大堆大小相等,
這樣的好處是可以減少程序運行時垃圾回收次數(shù)棋傍,從而提高效率。
查看內(nèi)存大小
public class Test01 {
public static void main(String[] args) {
System.out.println("最大內(nèi)存" + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "M");
System.out.println("可用內(nèi)存" + Runtime.getRuntime().freeMemory() / 1024 / 1024 + "M");
System.out.println("已經(jīng)使用內(nèi)存" + Runtime.getRuntime().totalMemory() / 1024 / 1024 + "M");
}
}
堆內(nèi)存大小配置
idea
參數(shù): -Xmx20m -Xms5m ->初始化堆內(nèi)存大小5M最大堆內(nèi)存20M
執(zhí)行結(jié)果:
設(shè)置新生代比例參數(shù)
-Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC
堆內(nèi)存初始化值20m,堆內(nèi)存最大值20m难审,新生代最大值可用1m瘫拣,eden空間和from/to空間的比例為2/1
查看一下默認(rèn) eden 區(qū) from區(qū) to區(qū)的比例大小
參數(shù):-XX:+PrintGCDetails -XX:+UseSerialGC
大概是8:1:1
新生代與老年代比例參數(shù)
-Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC
-XX:NewRatio=2
堆內(nèi)存初始化值20m,堆內(nèi)存最大值20m,新生代最大值可用1m告喊,eden空間和from/to空間的比例為2/1
新生代和老年代的占比為1/2
查看一下默認(rèn)新生代和老年代的配置比例
參數(shù): -XX:+PrintGCDetails -XX:+UseSerialGC
計算 87424/( 34944+4352*2) 大約是2:1 麸拄。所以新生代與老年代的大小默認(rèn)比例是1:2