关于JVM的参数学习汇总。

所有线程共享的内存主要有两块:堆内存和方法区。

其中堆内存分为两块:新生代Young generation(Eden区、From Survivor区、To Survivor区)、老年代Tenured generation。

方法区有人也称之“永久代”,但是它们并不等同。方法区是JVM的规范,而永久代是该规范的一种实现方式。从jdk1.7开始已经逐步去除“永久代”,在JDK8中取而代之的是“元空间”(Metaspace)。

元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制

下面是JVM的一些主要参数:

1. 基本参数

参数

描述

-XX:+

打开

-XX:-

关闭

2. 内存大小配置参数

参数

描述

-Xms

初始堆内存大小

-Xmx

最大堆内存大小

-Xmn

年轻代内存大小

-Xss

线程私有的虚拟机栈大小

-XX:MaxPermSize=64m

永久代最大值

-XX:PermSize

永久代初始值

-XX:MetaspaceSize

元空间初始大小

-XX:MaxMetaspaceSize

元空间最大值

-XX:MaxDirectMemorySize

直接内存大小,默认与Java堆最大值(-Xmx)一样

3. JVM调试参数

参数

描述

-verbose:gc

记录GC运行及运行时间

-XX:+PrintGCDetails

记录GC运行时的详细数据信息,以及在进程结束时打印当前的内存各区域分配情况。

-XX:+PrintGCTimeStamps

打印垃圾收集时间戳

-Xloggc:

gc日志存放路径

-XX:+HeapDumpOnOutOfMemoryError

在内存溢出的时候生成Heap dump文件

-verbose:class、-XX:+TraceClassLoading

查看类加载信息(要求Product版虚拟机)

-XX:+TraceClassUnLoading

查看类卸载信息(要求FastDebug版虚拟机)

-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

用于远程调试

4. 垃圾收集器

参数

描述

-XX:+UseSerialG

使用Serial+Serial Old的收集器组合进行内存回收。

-XX:+UseParNewGC

使用ParNew+Serial Old的收集器组合进行内存回收。

-XX:+UseConcMarkSweepGC

使用ParNew+CMS+Serial Old的收集器组合进行内存回收。Serial Old作为出现Concurrent Mode Failure失败后的后备收集器使用。

-XX:+UseParallelGC

使用Parallel Scavenge+Serial Old(PS Mark Sweep)收集器组合进行内存回收。

-XX:+UseParallelOldGC

使用Parallel Scavenge+Parallel Old收集器组合进行内存回收。

5. JVM调优参数

参数

描述

-XX:SurvivorRatio

新生代中Eden区域和Survivor区域(单个Survivor)的容量比值,默认为8

-XX:NewRatio

堆内存中老生代和年轻代的容量比值。例:NewRatio=2,表明old:new=2:1

-XX:PretenureSizeThreshold

直接晋升到老年代的对象大小,大于该值的对象直接在老年代分配。

-XX:MaxTenuringThreshold

对象在新生代中能存活的最大年龄。

-XX:+UseAdaptiveSizePolicy

动态调整Java堆中各个区域的大小以及进入老年代的年龄(限Parallel Scaverge收集器)

-XX:+HandlePromotionFailure

允许老年代分配担保失败,开启后可以冒险YGC。

-XX:ParallelGCThreads

设置并行GC时进行内存回收的线程数

-XX:GCTimeRatio

默认为99,即允许1%的GC时间。GC时间占总时间的比例由公式1/(1+GCTimeRatio)得出(限Parallel Scaverge收集器)

-XX:MaxGCPauseMillis

设置GC的最大停顿时间(限Parallel Scaverge收集器)

-XX:+CMSInitialingOccupancyFraction

设置CMS收集器在老年代空间被使用多少后触发Full GC。默认值是68,即68%。(限CMS收集器)

-XX:+UseCMSCompactionAtFullCollection

设置CMS在完成垃圾收集后进行一次内存碎片整理。(限CMS收集器)

-XX:+CMSFullGCsBeforeCompaction

设置CMS执行多少次GC后,下次GC时进行一次内存碎片整理,默认为0。即每次都整理。

-Xnoclassgc

不回收无用类