一、设置JVM参数
在上方的Run-Run Configurations-Arguments中可以设计JVM参数。
可用-verbose:gc和-XX:+PrintGCDetails来查看程序的GC情况和堆占用情况,如下:
还可设计其他参数如:
(1)-Xms20M
表示设置JVM启动内存的最小值为20M,必须以M为单位
(2)-Xmx20M
表示设置JVM启动内存的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免JVM内存自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要高
(3)-Xss128k
表示可以设置虚拟机栈的大小为128k
(4)-Xoss128k
表示设置本地方法栈的大小为128k。不过HotSpot并不区分虚拟机栈和本地方法栈,因此对于HotSpot来说这个参数是无效的
(5)-XX:PermSize=10M
表示JVM初始分配的永久代的容量,必须以M为单位
(6)-XX:MaxPermSize=10M
表示JVM允许分配的永久代的最大容量,必须以M为单位,大部分情况下这个参数默认为64M
(7)-Xnoclassgc
表示关闭JVM对类的垃圾回收
(8)-XX:+TraceClassLoading
表示查看类的加载信息
(9)-XX:+TraceClassUnLoading
表示查看类的卸载信息
(10)-XX:NewRatio=4
表示设置年轻代:老年代的大小比值为1:4,这意味着年轻代占整个堆的1/5
(11)-XX:SurvivorRatio=8
表示设置2个Survivor区:1个Eden区的大小比值为2:8,这意味着Survivor区占整个年轻代的1/5,这个参数默认为8
(12)-Xmn20M
表示设置年轻代的大小为20M
(13)-XX:+HeapDumpOnOutOfMemoryError
表示可以让虚拟机在出现内存溢出异常时Dump出当前的堆内存转储快照
(14)-XX:+UseG1GC
表示让JVM使用G1垃圾收集器
(15)-XX:+PrintGC
表示在控制台上打印出GC信息
(16)-XX:PretenureSizeThreshold=3145728
表示对象大于3145728(3M)时直接进入老年代分配,这里只能以字节作为单位
(17)-XX:MaxTenuringThreshold=1
表示对象年龄大于1,自动进入老年代
(18)-XX:CompileThreshold=1000
表示一个方法被调用1000次之后,会被认为是热点代码,并触发即时编译
(19)-XX:+PrintHeapAtGC
表示可以看到每次GC前后堆内存布局
(20)-XX:+PrintTLAB
表示可以看到TLAB的使用情况
(21)-XX:+UseSpining
开启自旋锁
(22)-XX:PreBlockSpin
更改自旋锁的自旋次数,使用这个参数必须先开启自旋锁
二、JDK的使用
打开cmd到Java/jdk/bin目录下,运行如下命令即可使用各个jdk功能。
1.用jps -l命令查看进程号
2.使用jstat -gc 1820 5000 10查看:
其中1820是用jps -l命令查看的applications.Application的进程号
5000和10代表每5000ms查看一次,共十次
S0C:年轻代中第一个存活区的大小
S1C:年轻代中第二个存活区的大小
S0U:年轻代中第一个存活区已使用的空间 (KB)
S1U:年轻代中第二个存活区已使用的空间 (KB)
EC: Edem 区大小
EU: 年轻代中 Edem 区已使用的空间 (KB)
OC: 老年代大小
OU: 老年代已使用的空间 (KB)
MC: 持久代大小
MU: 持久代已使用的空间 (KB)
YGC: 从应用程序启动到采样时 young gc 的次数
YGCT: 从应用程序启动到采样时 young gc 的所用的时间(s)
FGC: 从应用程序启动到采样时 full gc 的次数
FGCT: 从应用程序启动到采样时 full gc 的所用的时间
GCT: 从应用程序启动到采样时整个 gc 所用的时间
3.使用jstat -gcutil 1820 5000 10查看
S0 — Heap 上的 Survivor space 0 区已使用空间的百分比
S1 — Heap 上的 Survivor space 1 区已使用空间的百分比
E — Heap 上的 Eden space 区已使用空间的百分比
O — Heap 上的 Old space 区已使用空间的百分比
M — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
4.使用 jmap -heap 命令行工具查询程序的内存使用信息,包括虚拟机当前所使用的 GC 策略、heap 的配置情况(各区域的大小等)、heap 的使用情况统计:
使用命令jmap -heap 1820查看
使用jmap -histo命令行查看当前装载进内存的各类的实例数目及内存占用情况:
5.使用 jmap -clstats 命令行工具查看 class loader 的统计信息,即程序执行期间装载的 class 和 method 相关信息: