JVM虚拟机的一些参数设置

1、GC的输出日志:

a. -verbose:gc,辅助输出一些详细的gc信息

b. -XX:+PrintGCDetails,输出gc的详细信息

c. -XX:PrintGCApplicationStoppedTime,输出gc造成应用造成应用程序暂停的时间

d. -XX:PrintGCDataStamps,gc发生的时间信息

e. -XX:PrintHeapAtGC,在gc前后输出堆中各个区域的大小

f. -Xloggc:[file],将gc信息输出到单独的日志文件

2、Heap堆配置

a.-Xms:堆初始大小

b.-Xmx:堆最大值

c.-Xmn/Yong:新生代大小

d.PermSize/Perm:永久代大小。在Java7及以后版本,没有Perm这个内存区,所以这个设置没有意义。

e.MaxPermSize/Perm:永久代最大大小

f.-XX:SurvivorRatio:Eden:Survivor,新生代中新生区和幸存区的比值大小,例如:设置Yong区为10,设置-XX:SurvivorRatio=8,即设置Eden区为8,Survivor的s0和s1都为1,因为另个Survivor总有一个 Survivor为空

-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8

打印辅助GC信息,堆初始大小20M,最大20M,新生代10M,打印GC详细信息,新生比为8:1。


3、Stack栈设置

a.-Xss:栈大小

b.-Xoss:本地方法栈大小(如果虚拟机存在本地方法栈,才有意义。sun公司HotSpot不存在本地方法栈,这


个参数有,但是设置了也没啥用)

4、GC设置:

    -XX:+UseCMSCompactAtFullCollection   :开关参数,默认开启。在老年代内存不够时,或者零碎内存放不下大对象时,进行内存压缩。
-XX:CMSFullGCsBeforeCompaction=5: 设置当进行5次不压缩的GC后,跟着来一次压缩的GC。
-XX:MaxGCPauseMillis=m:m是一个大于0的毫秒数。即:收集器尽可能的保证内存回收花费的时间不超过设定值。
-XX:GCTimeRatio=n:n是大于0小于100的整数。公式1/(1+n)为垃圾收集时间占总时间的百分比。即:如果n=9。那么1/(1+9)=10%。GC运行的时间占总时间的10%。
-XX:+UseAdaptiveSizePolicy:这是一个开关参数,打开这个参数之后,就不需要手动指定新生代的大小(-Xmn),Eden和Survivor的比例(-XX:SurvivorRatio)、晋升老年代对象大小(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,自动调整这些参数,以配合停顿时间或者吞吐量。
-XX:PretenureSizeThreshold=m:大于m的对象将直接在老年代分配。例如:-XX:PretenureSizeThreshold=3145728,表示大于3M的对象将直接在老年代分配
-XX:MaxTenuringThreshold=n:经过n次Minor GC(新生代gc)还存活的对象将进入老年代。默认n=15
-XX:HandlePromotionFailure:开关参数 ,+/-决定是否开启。作用:进行MinorGC操作时会判断老年代剩余空间是否大于新生代所有对象大小之和。如果大于,则安全。如果小于,则不安全。开启参数,则表示允许不安全操作,可以在不安全的情况下进行MinorGC操作。关闭参数,表示不允许不安全的GC操作,在MinorGC同时要进行FullGC,腾出老年代空间。