JVM常用参数
(1)-Xms20M memory size内存初始大小 堆大小的最小值 1024倍数
表示设置JVM启动内存的最小值为20M,必须以M为单位 m:memory
(2)-Xmx20M
表示设置JVM启动内存的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免JVM内存自动扩展。
(3)-verbose:gc
表示输出虚拟机中GC的详细情况
(4)-Xss128k stack size 栈的内存
表示可以设置虚拟机栈的大小为128k s:stack
(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,这个参数默认为8
(12)-Xmn20M memory new 新生代内存
表示设置年轻代的大小为20M
(13)-XX:+HeapDumpOnOutOfMemoryError
表示可以让虚拟机在出现内存溢出异常时Dump出当前的堆内存转储快照
(14)-XX:+UseG1GC
表示让JVM使用G1垃圾收集器
(15)-XX:+PrintGCDetails
表示在控制台上打印出GC具体细节
(16)-XX:+PrintGC
表示在控制台上打印出GC信息
(17)-XX:PretenureSizeThreshold=3145728
表示对象大于3145728(3M)时直接进入老年代分配,这里只能以字节作为单位
(18)-XX:MaxTenuringThreshold=1
表示对象年龄大于1,自动进入老年代
(19)-XX:CompileThreshold=1000
表示一个方法被调用1000次之后,会被认为是热点代码,并触发即时编译
(20)-XX:+PrintHeapAtGC
表示可以看到每次GC前后堆内存布局
(21)-XX:+PrintTLAB
表示可以看到TLAB的使用情况
(22)-XX:+UseSpining
开启自旋锁
(23)-XX:PreBlockSpin
更改自旋锁的自旋次数,使用这个参数必须先开启自旋锁
JVM命令
1. jps
显示当前运行的java进程以及相关参数。
1.1 参数
jps -l hostid (hostid为RMI注册表中注册的主机名)
- -q 只输出LVMID,省略主类的名称;
- -l 输出应用程序main class的完整package名,或者 应用程序的jar文件完整路径名;
- -m 输出传递给main方法的参数;
- -v 输出传递给JVM的参数;
2. jstack
用于生成java虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的就是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。
jstack [option] vmid
- F : 当正常输出的请求不被响应时,强制输出线程堆栈;
- -l : 除堆栈外,显示关于锁的附加信息;
- -m:如果调用到本地方法的话,可以显示C/C++的堆栈
3. jstat
用于监控虚拟机各种运行状态信息的命令行工具。可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jstat [option vmid [interval[ s|ms] [count] ] ]例:查看TestDemo5程序垃圾回收情况,每隔200ms查询一次,一共查询5次jstat -gc vmid 250ms 5
4. jinfo
实时查看和调整虚拟机的各项参数。
5. jmap
用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。
堆Dump是反应Java堆使用情况的内存镜像,其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的状态等。 一般,在内存不足、GC异常等情况下,我们就会怀疑有内存泄露。这个时候我们就可以制作堆Dump来查看具体情况。分析原因。
jmap [option] vmid
6. jhat
分析jmap生成的堆转储快照。