《实战Java虚拟机》学习笔记之常用Java虚拟机参数
Contents
跟踪垃圾回收
-XX:+PrintGC
例子日志样本:
[GC 4793K->377K(15872K), 0.0006926 secs]
表示当前使用了4793K
,GC后,使用量变为377K
,最大可用为15872K
-XX:+PrintGCDetails
格式: [名称:当前某区大小->GC后某区大小(一共可用某区大小)
GC时间跟踪
-XX:+PrintGCTimeStamps
例子:
0.185: [GC 66048K->53077K(251392K), 0.0977580 secs]
-XX:+PrintGCDateStamps
例子:
2014-01-03T12:08:38.102-0100: [GC 66048K->53077K(251392K), 0.0959470 secs]
指定GC日志到某路径
-Xloggc
默认情况下,GC日志是打印到控制台的,添加这个参数,可以将GC日志重定向到某文件.
例子:
-Xloggc:/home/gc.log
查看GC时详细堆信息
-XX:+PrintHeapAtGC
查看应用程序执行时间和停顿时间
-XX:+PrintGCApplicationConcurrentTime
打印应用程序的执行时间
-XX:+PrintGCApplicationStoppedTime
打印应用程序由于GC而产生的停顿时间
查看虚拟机引用信息
-XX:+PrintReferenceGC
类的加载和卸载跟踪
-XX:+TraceClassLoading
-XX:+TraceClassUnloading
-verbose:class
: 这一个参数,相当于上两个一起。
查看虚拟机参数
-XX:+PrintVMOptions
: 查看显式传递的参数-XX:+PrintCommandLineFlags
:查看显式和隐式参数-XX:+PrintFlagsFinal
:查看所有包括系统默认的参数
堆的配置
- 整个堆的大小,公式为:
总堆可用大小(-Xmx) = 老年代 + 新生代 = 老年代 + eden + from + to
- 新生代总大小,公式为:
新生代(-Xmn)= Eden + from + to
- 新生代可用大小,公式为:
新生代可用大小 = Eden + from = Eden + to
- 整个虚拟机最大大小,公式为:
总可用大小 = 持久代 + 年老代 + 新生代
最大堆和初始堆设置
-Xms
:初始堆大小
例如:-Xms10m
-Xmx
:最大堆设置
例如:-Xmx100m
新生代大小
-Xmn
:一般设置为整个堆的1/3
到1/4
例如
-Xmn10m
-XX:SurvivorRatio
:设置新生代中eden
和from
/to
空间的比例关系
例如
-XX:SurvivorRatio=2
-XX:SurvivorRatio = eden/from = eden/to
注意:新生代总可用的空间,只有 eden + from
或者 eden + to
。即
新生代总可用空间 = eden + from = eden + to
-XX:NewRatio
:设置新生代和老年代的比例
例如:
-XX:NewRatio=2
-XX:NewRatio=老年代/新生代
堆溢出处理
-XX:+HeapDumpOnOutOfMemoryError
:可堆溢出时,导出整个堆信息-XX:HeapDumpPath
:导出到指定的路径
例如
-XX:HeapDumpPath=/home/to/path
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>"
:在发现溢出时,执行指定命令
例如:
-Xmx20
-XX:+HeapDumpOnOutOfMemoryError
”-XX:OnOutOfMemoryError=/path/to/commnd.sh %p”
注意:写法是双引号包括整个参数。%p 表示进程号
非堆区
codeCache 区
设置 codeCache 区的内存大小
-XX:ReservedCodeCacheSize=256M
方法区(永久代)[JDK 1.8前]
-XX:PermSize
:初始永久区大小
例如:
-XX:PermSize=64M
-XX:MaxPermSize
:最大永久区大小
例如:
-XX:MaxPermSize=128M
元数据区[JDK 1.8 及之后]
默认的情况下,该区只受系统可用内存的限制。但也可以使用参数
-XX:MetaspaceSize
:指定初始时的元数据区大小
例如:
-XX:MetaspaceSize=128M
-XX:MaxMetaspaceSize
:指定元数据区的最大可用值。
例如:
-XX:MaxMetaspaceSize=256M
直接堆内存配置
-XX:MaxDirectMemorySize
: 最大可用直接内存。如果不设置,默认值为最大堆空间,即-Xmx
的值。
更新
在网上看到一个图非常好, 这里引用一下:
原文 http://javahonk.com/how-many-types-memory-areas-allocated-by-jvm/