JVM学习笔记五

JVM参数之堆栈空间配置

参数含义
-Xms初始堆大小
-Xmx最大堆空间
-Xmn设置新生代大小
-XX:SurvivorRatio设置新生代eden空间和from/to空间的比例关系
-XX:PermSize方法区初始大小
-XX:MaxPermSize方法区最大大小
-XX:MetaspaceSize元空间GC阈值(JDK1.8)
-XX:MaxMetaspaceSize最大元空间大小(JDK1.8)
-Xss栈大小
-XX:MaxDirectMemorySize直接内存大小,默认为最大堆空间

一、堆配置

-Xms 设置堆的初始空间大小,使用 -Xmx 设置堆的最大空间大小

java -Xms20m -Xmx30m

JVM 提供了参数 -Xmn 来设置年轻代内存的大小,但没有提供参数设置老年代的大小。但其实老年代的大小就等于堆大小减去年轻代大小。

java -Xms20m -Xmn10M

-XX:+PrintGCDetails:查看内存区域的分配信息

-XX:SurvivorRatio = eden/from = eden/to:设置 eden / from 空间的比例关系

java -Xms20m -Xmn10M -XX:SurvivorRatio=2 -XX:+PrintGCDetails

PSYoungGen 的 total 指的是可用内存,from space 和 to space 两个区域,同一时间只有一个区域是可以用的。

在 JDK 1.8 之前,所加载的类信息都放在永久代中。我们用 -XX:PermSize 设置永久代初始大小,用 -XX:MaxPermSize 设置永久代最大大小。但在 JDK1.8 之时,永久代被移除,取而代之的是元空间(Metaspace)。在元空间这块内存中,有两个参数很相似,它们是: -XX:MetaspaceSize-XX:MaxMetaspaceSize。MetaspaceSize 设置的是元空间发生 GC 的初始阈值。当达到这个值时,元空间发生 GC 操作,这个值默认是 20.8M。而 MaxMetaspaceSize 则是设置元空间的最大大小,默认基本是机器的物理内存大小。虽然可以不设置,但还是建议设置一下,因为如果一直不断膨胀,那么 JVM 进程可能会被 OS kill 掉。

二、栈空间

-Xss 设置栈空间大小

java -Xss2m

三、直接内存

 -XX:MaxDirectMemorySiz :设置大小,默认对内存最大内存。

 

JVM参数之查看JVM参数

  1. -XX:+PrintVMOptions :程序运行时,打印虚拟机接受到的命令行显式参数。
  2. -XX:+PrintCommandLineFlags: 打印传递给虚拟机的显式和隐式参数。
  3. -XX:+PrintFlagsFinal: 打印所有的系统参数的值

JVM参数之追踪类信息

参数含义
-verbose:class跟踪类的加载和卸载
-XX:+TraceClassLoading跟踪类的加载
-XX:+TraceClassUnloading跟踪类的卸载
-XX:+PrintClassHistogram显示类信息柱状图

 

JVM参数之GC日志

参数含义
-XX:PrintGC打印GC日志
-XX:+PrintGCDetails打印详细的GC日志。还会在退出前打印堆的详细信息。
-XX:+PrintHeapAtGC每次GC前后打印堆信息。
-XX:+PrintGCTimeStamps打印GC发生的时间。
-XX:+PrintGCApplicationConcurrentTime打印应用程序的执行时间
-XX:+PrintGCApplicationStoppedTime打印应用由于GC而产生的停顿时间
-XX:+PrintReferenceGC跟踪软引用、弱引用、虚引用和Finallize队列。
-XLoggc将GC日志以文件形式输出。

 

JDK性能监控命令

查看虚拟机进程:jps 命令

参数含义
-q指定jps只输出进程ID
-m输出传递给Java进程的参数
-l输出主函数的完整路径
-v显示传递给Java虚拟机的参数

 

虚拟机统计信息:jstat 命令

jstat -<option> [-t] [-h<lines>] <vmid> [<interval>] [<count>]]

 

参数含义
-class监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc监视Java堆状况,包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息
-gccapacity监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew监视新生代GC状况
-gcnewcapacity监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-gcold监视老年代GC状况
-gcoldcapacity监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间
-gcpermcapacity输出永久代使用到的最大、最小空间
-compiler输出JIT编译器编译过的方法、耗时信息
-printcompilation输出已经被JIT编译的方法

-t 参数表示输出时间戳、-h 参数表示在多少行后输出一个表头、vmid 则是虚拟机的进程ID、interval 和 count 表示输出间隔以及输出次数。

例如:我们用jstat命令来监视一个LVMID为2365的JVM进程。

$ jstat -gcutil 2365 
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00  12.05   0.00  14.17      0    0.000     0    0.000    0.000

其中每个选项的意义如下:

参数含义
S0、S1表示Survivor0、Survivor1,还未使用。
E表示Eden区使用了12.05%的空间。
O表示老年代还未使用。
P表示永久代使用了14.17%的空间
YUC、YGCT表示从程序运行以来一共发生了0次Minor GC(YGC,Young GC),总共耗时0秒。
FGC、FGCT表示从程序运行以来一共发生了0次Full GC(FGC,Full GC),总共耗时0秒。

查看虚拟机参数:jinfo 命令

jinfo <option> <pid>

导出堆到文件:jmap 命令

jmap [option] vmid

堆分析工具:jhat 命令

查看线程堆栈:jstack 命令

远程主机信息收集:jstatd 命令

多功能命令行:jcmd 命令​​​​​​​

性能统计工具:hprof

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值