JVM参数查看 java -XX:+PrintFlagsFinal和java -XX:+PrintCommandLineFlags
1. JVM Process Status(Jps)
可以列出正在运行的虚拟机进程,并得到进程的本地虚拟机唯一ID(Local Virtual Machine Identifier, LVMID),可被其它Java工具使用。
1.1 未启用其它Java程序

1.2 启动IDEA,但未运行Java程序


1.3 在IDEA中运行TestGeneric类程序


2. JVM Statistics Monitoring Tool(Jstat)
用于监视虚拟机各种状态信息,包括类装载、垃圾回收等数据。可通过jstat -options查看有哪些选项信息输出。

2.1 类装载信息

2.2 垃圾回收相关信息(以KB为单位)
S0表示第一个Survivor区,S1表示第二个;S0C表示第一个Survivor区的容量,S0U表示第一个Survivor区的使用量。EC表示Eden区的容量,EU表示Eden区的使用量。OC表示老年代的容量,OU表示老年代区使用量。YGC表示新生代回收次数,YGCT表示新生代回收时间;FGC表示老年代回收次数,FGCT表示老年代回收时间。GCT是总的垃圾回收时间。CGC是什么垃圾回收?

3. Configuration Info for Java(Jinfo)
查看和调整虚拟机参数,只能查看和修改一部分可改的虚拟机参数,操作选项如下。

3.1 查看虚拟机参数


3.2 查看特定虚拟机参数

3.3 修改特定虚拟机参数

4. Stack Trace for Java(Jstack)
根据线程的堆栈信息分析线程异常情况。



5. 总结
Jps:虚拟机进程状态工具,查看Java程序的信息,主要是得到进程ID。
Jstat:虚拟机数据监视工具,查看Java程序的类装载和垃圾回收等数据,内存监控。
Jinfo:虚拟机配置信息工具,查看和修改部分可改的虚拟机参数。
Jstack:Java堆栈跟踪工具,根据线程堆栈信息分析线程状况。主要用于线程监控。
JConsole:上述工具的结合体,并且有图像界面。

6. JVM调优
6.1 栈大小的参数是 -Xss,默认是1M
6.2 堆初始大小的参数是 -Xms,默认是1/64内存大小;堆内存最大的参数是 -Xmx,默认是1/4内存大小。
6.3 -XX:NewRatio是初始老年代和新生代的比值,默认是2。
6.4 虚拟机调优:1.代码层面:①尽量少用临时对象;②可以使用基本类型就不要使用包装类;③对象不使用时,显式地设为null。2.JVM参数层面:①合适的堆内存初始值;②合适的堆内存大小;③老年代对象的判定;④分配担保。