- 浏览: 41226 次
- 性别:
- 来自: 北京
文章分类
最新评论
jstat工具可以详细的显示出HotSpot VM的性能信息.
目前Sun JDK和OpenJDK中均使用了HotSpot技术,即热点代码探测技术。通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。
详细的参数及含义见本文结尾的参考文献3.
例如:1. 查看使用说明
jstat -help
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Definitions:
<option> An option reported by the -options option
<vmid> Virtual Machine Identifier. A vmid takes the following form:
<lvmid>[@<hostname>[:<port>]]
Where <lvmid> is the local vm identifier for the target
Java virtual machine, typically a process id; <hostname> is
the name of the host running the target Java virtual machine;
and <port> is the port number for the rmiregistry on the
target host. See the jvmstat documentation for a more complete
description of the Virtual Machine Identifier.
<lines> Number of samples between header lines.
<interval> Sampling interval. The following forms are allowed:
<n>["ms"|"s"]
Where <n> is an integer and the suffix specifies the units as
milliseconds("ms") or seconds("s"). The default units are "ms".
<count> Number of samples to take before terminating.
-J<flag> Pass <flag> directly to the runtime system.
例如2. 查看可用参数
jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-printcompilation
例如:3. gc统计的摘要. 每10秒显示一次,显示5次.
jstat -gcutil pid 10000 5
或者
jstat -gcutil pid 10s 5
结果:
S0 S1 E O P YGC YGCT FGC FGCT GCT
50.00 0.00 85.00 90.19 75.27 154722 515.577 740 63.594 579.171
0.00 25.00 83.56 90.23 75.27 154723 515.582 740 63.594 579.176
25.00 0.00 68.09 90.28 75.27 154724 515.586 740 63.594 579.180
0.00 75.00 51.18 90.38 75.27 154725 515.590 740 63.594 579.184
50.00 0.00 34.47 90.47 75.27 154726 515.594 740 63.594 579.188
其中参数的含义:
S0: Survivor space 0, S0区使用量/S0区容量=S0区使用率.
S1: Survivor space 1, S1区使用量/S1区容量=S1区使用率.
E: Eden space, Eden区使用量/Eden区容量=Eden区使用率.
O: Old space, Old区使用量/Old区容量=Old区使用率.
P: Permanent space, Permanent区使用量/Permanent区容量=Permanent区使用率.
YGC: Young generation GC events, Young GC次数.
YGCT: Young generation garbage collection time, Young GC时间(毫秒).
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: Total garbage collection time, 总GC时间(毫秒).
注:在New Generation块中,一般进行Younc GC垃圾回收,采用Copying的算法,速度快。每次GC的时候,存活下来的对象首先由Eden拷贝到某个Survivor Space, 当Survivor Space空间满了后, 剩下的live对象就被直接拷贝到Old Generation中去。因此,每次GC后,Eden内存块会被清空。
具体的例子如下.
S0 S1 E O P YGC YGCT FGC FGCT GCT
21.72 0.00 23.83 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 32.21 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 42.84 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 52.90 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 60.76 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 69.49 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 77.63 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 85.47 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 92.54 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 13.03 100.00 82.26 38.02 813361 47227.030 40 12.181 47239.211
0.00 16.59 9.18 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 19.23 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 24.48 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 33.70 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 44.49 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 64.78 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 85.11 82.26 38.02 813361 47227.091 40 12.181 47239.272
21.34 0.00 5.14 82.26 38.02 813362 47227.152 40 12.181 47239.334
21.34 0.00 24.11 82.26 38.02 813362 47227.152 40 12.181 47239.334
21.34 0.00 44.38 82.26 38.02 813362 47227.152 40 12.181 47239.334
21.34 0.00 61.60 82.26 38.02 813362 47227.152 40 12.181 47239.334
过程:使用Eden/S0/S1三个分区
算法过程:[见参考4]
1). Eden+S0可分配新生对象;
2). 对Eden+S0进行垃圾收集,存活对象复制到S1。清理Eden+S0。一次新生代GC结束。
3). Eden+S1可分配新生对象;
4). 对Eden+S1进行垃圾收集,存活对象复制到S0。清理Eden+S1。二次新生代GC结束。
5). goto 1。
例如4. 监控类加载情况
jstat -class pid 10000 5
Loaded Bytes Unloaded Bytes Time
2130 4228.4 5 8.4 1.97
2130 4228.4 5 8.4 1.97
2130 4228.4 5 8.4 1.97
2130 4228.4 5 8.4 1.97
2130 4228.4 5 8.4 1.97
Loaded: 加载的类的数量
Bytes:加载的类所占的空间
Unloaded:卸载的类的数量
Bytes:卸载的类占用的空间
Time:操作所消耗的时间(毫秒)
例如5. 监控类编译情况
jstat -compiler pid 10000 5
Compiled Failed Invalid Time FailedType FailedMethod
643 0 0 12.11 0
643 0 0 12.11 0
643 0 0 12.11 0
643 0 0 12.11 0
643 0 0 12.11 0
Compiled: 实时编译的数量
Failed:失败的数量
Invalid:无效的数量
Time:消耗的时间(毫秒)
FailedType:失败的类型数
FailedMethod:失败的方法数
例如6. 监控堆内存heap的gc情况
jstat -gc 15959 10000 5
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
128.0 128.0 0.0 64.0 2432.0 2364.8 17600.0 15941.8 21248.0 15995.2 154895 516.259 741 63.692 579.951
128.0 128.0 64.0 0.0 2432.0 2104.9 17600.0 15957.8 21248.0 15995.2 154896 516.263 741 63.692 579.955
128.0 128.0 0.0 96.0 2432.0 1664.5 17600.0 15973.8 21248.0 15995.2 154897 516.265 741 63.692 579.957
128.0 128.0 64.0 0.0 2432.0 1309.9 17600.0 15989.8 21248.0 15995.2 154898 516.268 741 63.692 579.960
128.0 128.0 0.0 32.0 2432.0 941.3 17600.0 15997.8 21248.0 15995.2 154899 516.272 741 63.692 579.964
S0C: Survivor space 0 Capacity, 当前survivor区0的容量(KB)
S1C: Survivor space 1 Capacity, 当前survivor区1的容量(KB)
S0U: Survivor space 0 Utilzation, survivor区0的使用量(KB)
S1U: Survivor space 1 Utilzation, survivor区1的使用量(KB)
EC: Eden space Capacity, 当前eden区的容量(KB)
EU: Eden space Utilzation, 当前eden区的使用量(KB)
OC: Old space Capacity, 当前old区的容量(KB)
OU: Old space Utilzation, 当前old区的使用量(KB)
PC, Permanent space Capacity, 当前permanent区的容量(KB)
PU, Permanent space Capacity, 当前permanent区的使用量(KB)
YGC: Young Generation Garbage Collection events, Young GC次数
YGCT: Young Generation Garbage Collection Time, Young GC时间(毫秒)
FGC: Full Garbage Collection events, Full GC次数
FGCT: Full Garbage Collection Time, Full GC时间(毫秒)
GCT: total Garbage Collection Time, 总的GC时间(毫秒)
具体过程和例子3是一致的, 详细的例子如下.
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
128.0 128.0 0.0 32.0 2432.0 390.5 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 796.7 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 1230.3 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 1648.7 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 1663.0 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 2067.7 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 96.0 0.0 2432.0 404.7 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 838.4 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 1244.7 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 1661.9 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 1723.3 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 2067.5 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 0.0 64.0 2432.0 432.0 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 838.3 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 1244.6 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 1660.9 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 1761.2 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 2094.2 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 64.0 0.0 2432.0 404.7 16768.0 15223.2 21248.0 15992.6 155422 518.191 744 63.984 582.175
128.0 128.0 64.0 0.0 2432.0 811.0 16768.0 15223.2 21248.0 15992.6 155422 518.191 744 63.984 582.175
例如7. 监控gc中每一代的最大值和使用情况
stat -gccapacity pid 10000 5
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154902 741
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154902 741
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154903 741
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154904 741
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154905 741
NGCMN: New Generation Capacity MiNimum, 新生代容量的最小值(KB)
NGCMX: New Generation Capacity MaXimum, 新生代容量的最大值(KB)
NGC: New Generation Capacity, 新生代容量的当前值(KB)
S0C: Survivor space 0 Capacity, 当前survivor区0的容量(KB)
S1C: Survivor space 1 Capacity, 当前survivor区1的容量(KB)
EC: Eden space Capacity, 当前eden区的容量(KB)
OGCMN: Old Generation Capacity MiNimum, old代容量的最小值(KB)
OGCMX: Old Generation Capacity MaXimum, old代容量的最大值(KB)
OGC: Old Generation Capacity, old代容量的当前值(KB)
OC: Old space Capacity, old区容量的当前值(KB)
PGCMN: Permanent Generation Capacity MiNimum, 持久代容量的最小值(KB)
PGCMX: Permanent Generation Capacity MaXimum, 持久代容量的最大值(KB)
PGC: Permanent Generation Capacity, 持久代容量的当前值(KB)
PC: Permanent space Capacity, 持久代容量的当前值(KB)
YGC: Young Generation Garbage Collection events, Young GC次数
FGC: Full Garbage Collection events, Full GC次数
问题:为什么NGC可以小于NGCMN?
例如8. 监控GC原因. 在gcutil后加上gc原因列.
jstat -gccause pid 10000 5
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
0.00 50.00 68.24 91.44 75.28 154907 516.298 741 63.692 579.990 unknown GCCause No GC
50.00 0.00 51.18 91.53 75.28 154908 516.301 741 63.692 579.994 unknown GCCause No GC
0.00 50.00 34.47 91.62 75.28 154909 516.305 741 63.692 579.997 unknown GCCause No GC
50.00 0.00 16.64 91.71 75.28 154910 516.308 741 63.692 580.001 unknown GCCause No GC
50.00 0.00 84.97 91.71 75.28 154910 516.308 741 63.692 580.001 unknown GCCause No GC
S0: Survivor space 0, S0区使用量/S0区容量=S0区使用率.
S1: Survivor space 1, S1区使用量/S1区容量=S1区使用率.
E: Eden space, Eden区使用量/Eden区容量=Eden区使用率.
O: Old space, Old区使用量/Old区容量=Old区使用率.
P: Permanent space, Permanent区使用量/Permanent区容量=Permanent区使用率.
YGC: Young generation GC events, Young GC次数.
YGCT: Young generation garbage collection time, Young GC时间(毫秒).
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: Total garbage collection time, 总GC时间(毫秒).
LGCC: Last Garbage Collection Cause, 上次GC原因.
GCC: Garbage Collection Cause, 本次GC原因.
例如9. 监控新生代new generation的GC情况
jstat -gcnew pid 10000 5
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
128.0 128.0 64.0 0.0 1 15 128.0 2432.0 2065.1 154912 516.316
128.0 128.0 0.0 64.0 1 15 128.0 2432.0 2063.0 154913 516.319
128.0 128.0 64.0 0.0 1 15 128.0 2432.0 1655.0 154914 516.323
128.0 128.0 0.0 64.0 1 15 128.0 2432.0 1220.5 154915 516.327
128.0 128.0 64.0 0.0 1 15 128.0 2432.0 814.0 154916 516.331
S0C: Survivor space 0 Capacity, 当前survivor区0的容量(KB)
S1C: Survivor space 1 Capacity, 当前survivor区1的容量(KB)
S0U: Survivor space 0 Utilzation, survivor区0的使用量(KB)
S1U: Survivor space 1 Utilzation, survivor区1的使用量(KB)
TT: Tenuring Threshold, 存活次数. 达到最大存活次数后,才能晋升到旧生代(Old Generation)
MTT: Maximum Tenuring Thershold, 最大存活次数.
DSS: Desired Survivor Size (KB), 期望存活大小(KB)
EC: Eden space Capacity, 当前eden区的容量(KB)
EU: Eden space Utilzation, 当前eden区的使用量(KB)
YGC: Young Generation Garbage Collection events, Young GC次数
YGCT: Young Generation Garbage Collection Time, Young GC时间(毫秒)
例如10. 监控新生代new generation的最大值和使用情况
jstat -gcnewcapacity pid 10000 5
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154918 741
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154919 741
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154920 741
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154921 741
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154922 741
NGCMN: New Generation Capacity MiNimum, 新生代容量最小值(KB).
NGCMX: New Generation Capacity MaXimum, 新生代容量最大值(KB).
NGC: New Generation Capacity, 新生代容量当前值(KB).
S0CMX: Survivor space 0 Capacity MaXimum, 生存区0容量的最大值(KB).
S0C: Survivor space 0 Capacity, 生存区0容量(KB).
S1CMX: Survivor space 1 Capacity MaXimum, 生存区1容量的最大值(KB).
S1C: Survivor space 1 Capacity, 生存区1容量(KB).
ECMX: Eden space Capacity MaXimum, Eden区容量的最大值(KB).
EC: Eden Capacity, Eden区容量的当前值(KB).
YGC: Young generation GC events, Young GC次数.
FGC: Number of full GC events, Full GC次数.
问题:为什么S0CMX可以比S0C小?
例如11. 监控old代和持久代permanent的GC情况
jstat -gcold pid 10000 5
PC PU OC OU YGC FGC FGCT GCT
21248.0 15995.2 17600.0 16333.8 154923 741 63.692 580.047
21248.0 15995.2 17600.0 16349.8 154924 741 63.692 580.050
21248.0 15995.2 17600.0 16365.8 154925 741 63.692 580.054
21248.0 15995.2 17600.0 16381.8 154926 741 63.692 580.057
21248.0 15995.2 17600.0 16381.8 154926 741 63.692 580.057
PC: Permanent space Capacity, 持久区当前容量(KB).
PU: Permanent space Utilzation, 持久区使用量(KB).
OC: Old space Capacity, Old区当前容量(KB)
OU: Old space Utilzation, Old区使用量(KB)
YGC: Young generation GC events, Young GC次数.
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: total Garbage Collection Time, 总的GC时间(毫秒)
例如12. 监控old代的最大值和使用情况
jstat -gcoldcapacity pid 10000 5
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
42240.0 675840.0 17600.0 17600.0 154928 741 63.692 580.064
42240.0 675840.0 17600.0 17600.0 154929 741 63.692 580.068
42240.0 675840.0 17600.0 17600.0 154929 741 63.692 580.068
42240.0 675840.0 17600.0 17600.0 154930 741 63.692 580.072
42240.0 675840.0 17600.0 17600.0 154931 741 63.692 580.075
OGCMN: Old Generation Capacity MiNimum, 老生代容量最小值(KB).
OGCMX: Old Generation Capacity MaXimum, 老生代容量最大值(KB).
OGC: Old Generation Capacity, 老生代容量当前值(KB).
OC: Old space Capacity, 老生区当前容量(KB)
YGC: Young generation GC events, Young GC次数.
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: total Garbage Collection Time, 总的GC时间(毫秒)
例如13. 监控持久代permanent的最大值和使用情况
jstat -gcpermcapacity pid 10000 5
PGCMN PGCMX PGC PC YGC FGC FGCT GCT
21248.0 83968.0 21248.0 21248.0 154933 741 63.692 580.083
21248.0 83968.0 21248.0 21248.0 154934 741 63.692 580.086
21248.0 83968.0 21248.0 21248.0 154935 741 63.692 580.090
21248.0 83968.0 21248.0 21248.0 154935 741 63.692 580.090
21248.0 83968.0 21248.0 21248.0 154936 741 63.692 580.094
PGCMN: Permanent Generation Capacity MiNimum, 持久代容量最小值(KB).
PGCMX: Permanent Generation Capacity MaXimum, 持久代容量最大值(KB).
PGC: Permanent Generation Capacity, 持久代容量当前值(KB).
PC: Permanent space Capacity, 持久区容量当前值(KB).
YGC: Young generation GC events, Young GC次数.
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: total Garbage Collection Time, 总的GC时间(毫秒)
例如14. 监控HotSpot的实时编译情况
jstat -printcompilation pid 10000 5
Compiled Size Type Method
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
Compiled: 编译的任务数
Size: 方法的bytecode的bytes数
Type: 编译类型
Method: 编译的方法对应的类型和方法名.
参考文献:
1. Sun HotSpot VM
2. Java SE 7: Reviewing JVM Performance Command Line Tools
3. jstat - Java Virtual Machine Statistics Monitoring Tool
4. JVM中的垃圾收集算法和Heap分区简记
目前Sun JDK和OpenJDK中均使用了HotSpot技术,即热点代码探测技术。通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。
详细的参数及含义见本文结尾的参考文献3.
例如:1. 查看使用说明
jstat -help
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Definitions:
<option> An option reported by the -options option
<vmid> Virtual Machine Identifier. A vmid takes the following form:
<lvmid>[@<hostname>[:<port>]]
Where <lvmid> is the local vm identifier for the target
Java virtual machine, typically a process id; <hostname> is
the name of the host running the target Java virtual machine;
and <port> is the port number for the rmiregistry on the
target host. See the jvmstat documentation for a more complete
description of the Virtual Machine Identifier.
<lines> Number of samples between header lines.
<interval> Sampling interval. The following forms are allowed:
<n>["ms"|"s"]
Where <n> is an integer and the suffix specifies the units as
milliseconds("ms") or seconds("s"). The default units are "ms".
<count> Number of samples to take before terminating.
-J<flag> Pass <flag> directly to the runtime system.
例如2. 查看可用参数
jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-printcompilation
例如:3. gc统计的摘要. 每10秒显示一次,显示5次.
jstat -gcutil pid 10000 5
或者
jstat -gcutil pid 10s 5
结果:
S0 S1 E O P YGC YGCT FGC FGCT GCT
50.00 0.00 85.00 90.19 75.27 154722 515.577 740 63.594 579.171
0.00 25.00 83.56 90.23 75.27 154723 515.582 740 63.594 579.176
25.00 0.00 68.09 90.28 75.27 154724 515.586 740 63.594 579.180
0.00 75.00 51.18 90.38 75.27 154725 515.590 740 63.594 579.184
50.00 0.00 34.47 90.47 75.27 154726 515.594 740 63.594 579.188
其中参数的含义:
S0: Survivor space 0, S0区使用量/S0区容量=S0区使用率.
S1: Survivor space 1, S1区使用量/S1区容量=S1区使用率.
E: Eden space, Eden区使用量/Eden区容量=Eden区使用率.
O: Old space, Old区使用量/Old区容量=Old区使用率.
P: Permanent space, Permanent区使用量/Permanent区容量=Permanent区使用率.
YGC: Young generation GC events, Young GC次数.
YGCT: Young generation garbage collection time, Young GC时间(毫秒).
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: Total garbage collection time, 总GC时间(毫秒).
注:在New Generation块中,一般进行Younc GC垃圾回收,采用Copying的算法,速度快。每次GC的时候,存活下来的对象首先由Eden拷贝到某个Survivor Space, 当Survivor Space空间满了后, 剩下的live对象就被直接拷贝到Old Generation中去。因此,每次GC后,Eden内存块会被清空。
具体的例子如下.
S0 S1 E O P YGC YGCT FGC FGCT GCT
21.72 0.00 23.83 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 32.21 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 42.84 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 52.90 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 60.76 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 69.49 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 77.63 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 85.47 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 0.00 92.54 82.26 38.02 813360 47227.030 40 12.181 47239.211
21.72 13.03 100.00 82.26 38.02 813361 47227.030 40 12.181 47239.211
0.00 16.59 9.18 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 19.23 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 24.48 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 33.70 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 44.49 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 64.78 82.26 38.02 813361 47227.091 40 12.181 47239.272
0.00 16.59 85.11 82.26 38.02 813361 47227.091 40 12.181 47239.272
21.34 0.00 5.14 82.26 38.02 813362 47227.152 40 12.181 47239.334
21.34 0.00 24.11 82.26 38.02 813362 47227.152 40 12.181 47239.334
21.34 0.00 44.38 82.26 38.02 813362 47227.152 40 12.181 47239.334
21.34 0.00 61.60 82.26 38.02 813362 47227.152 40 12.181 47239.334
过程:使用Eden/S0/S1三个分区
算法过程:[见参考4]
1). Eden+S0可分配新生对象;
2). 对Eden+S0进行垃圾收集,存活对象复制到S1。清理Eden+S0。一次新生代GC结束。
3). Eden+S1可分配新生对象;
4). 对Eden+S1进行垃圾收集,存活对象复制到S0。清理Eden+S1。二次新生代GC结束。
5). goto 1。
例如4. 监控类加载情况
jstat -class pid 10000 5
Loaded Bytes Unloaded Bytes Time
2130 4228.4 5 8.4 1.97
2130 4228.4 5 8.4 1.97
2130 4228.4 5 8.4 1.97
2130 4228.4 5 8.4 1.97
2130 4228.4 5 8.4 1.97
Loaded: 加载的类的数量
Bytes:加载的类所占的空间
Unloaded:卸载的类的数量
Bytes:卸载的类占用的空间
Time:操作所消耗的时间(毫秒)
例如5. 监控类编译情况
jstat -compiler pid 10000 5
Compiled Failed Invalid Time FailedType FailedMethod
643 0 0 12.11 0
643 0 0 12.11 0
643 0 0 12.11 0
643 0 0 12.11 0
643 0 0 12.11 0
Compiled: 实时编译的数量
Failed:失败的数量
Invalid:无效的数量
Time:消耗的时间(毫秒)
FailedType:失败的类型数
FailedMethod:失败的方法数
例如6. 监控堆内存heap的gc情况
jstat -gc 15959 10000 5
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
128.0 128.0 0.0 64.0 2432.0 2364.8 17600.0 15941.8 21248.0 15995.2 154895 516.259 741 63.692 579.951
128.0 128.0 64.0 0.0 2432.0 2104.9 17600.0 15957.8 21248.0 15995.2 154896 516.263 741 63.692 579.955
128.0 128.0 0.0 96.0 2432.0 1664.5 17600.0 15973.8 21248.0 15995.2 154897 516.265 741 63.692 579.957
128.0 128.0 64.0 0.0 2432.0 1309.9 17600.0 15989.8 21248.0 15995.2 154898 516.268 741 63.692 579.960
128.0 128.0 0.0 32.0 2432.0 941.3 17600.0 15997.8 21248.0 15995.2 154899 516.272 741 63.692 579.964
S0C: Survivor space 0 Capacity, 当前survivor区0的容量(KB)
S1C: Survivor space 1 Capacity, 当前survivor区1的容量(KB)
S0U: Survivor space 0 Utilzation, survivor区0的使用量(KB)
S1U: Survivor space 1 Utilzation, survivor区1的使用量(KB)
EC: Eden space Capacity, 当前eden区的容量(KB)
EU: Eden space Utilzation, 当前eden区的使用量(KB)
OC: Old space Capacity, 当前old区的容量(KB)
OU: Old space Utilzation, 当前old区的使用量(KB)
PC, Permanent space Capacity, 当前permanent区的容量(KB)
PU, Permanent space Capacity, 当前permanent区的使用量(KB)
YGC: Young Generation Garbage Collection events, Young GC次数
YGCT: Young Generation Garbage Collection Time, Young GC时间(毫秒)
FGC: Full Garbage Collection events, Full GC次数
FGCT: Full Garbage Collection Time, Full GC时间(毫秒)
GCT: total Garbage Collection Time, 总的GC时间(毫秒)
具体过程和例子3是一致的, 详细的例子如下.
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
128.0 128.0 0.0 32.0 2432.0 390.5 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 796.7 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 1230.3 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 1648.7 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 1663.0 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 0.0 32.0 2432.0 2067.7 16768.0 15175.2 21248.0 15992.6 155419 518.181 744 63.984 582.165
128.0 128.0 96.0 0.0 2432.0 404.7 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 838.4 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 1244.7 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 1661.9 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 1723.3 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 96.0 0.0 2432.0 2067.5 16768.0 15191.2 21248.0 15992.6 155420 518.184 744 63.984 582.168
128.0 128.0 0.0 64.0 2432.0 432.0 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 838.3 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 1244.6 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 1660.9 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 1761.2 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 0.0 64.0 2432.0 2094.2 16768.0 15207.2 21248.0 15992.6 155421 518.188 744 63.984 582.172
128.0 128.0 64.0 0.0 2432.0 404.7 16768.0 15223.2 21248.0 15992.6 155422 518.191 744 63.984 582.175
128.0 128.0 64.0 0.0 2432.0 811.0 16768.0 15223.2 21248.0 15992.6 155422 518.191 744 63.984 582.175
例如7. 监控gc中每一代的最大值和使用情况
stat -gccapacity pid 10000 5
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154902 741
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154902 741
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154903 741
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154904 741
21120.0 337920.0 2688.0 128.0 128.0 2432.0 42240.0 675840.0 17600.0 17600.0 21248.0 83968.0 21248.0 21248.0 154905 741
NGCMN: New Generation Capacity MiNimum, 新生代容量的最小值(KB)
NGCMX: New Generation Capacity MaXimum, 新生代容量的最大值(KB)
NGC: New Generation Capacity, 新生代容量的当前值(KB)
S0C: Survivor space 0 Capacity, 当前survivor区0的容量(KB)
S1C: Survivor space 1 Capacity, 当前survivor区1的容量(KB)
EC: Eden space Capacity, 当前eden区的容量(KB)
OGCMN: Old Generation Capacity MiNimum, old代容量的最小值(KB)
OGCMX: Old Generation Capacity MaXimum, old代容量的最大值(KB)
OGC: Old Generation Capacity, old代容量的当前值(KB)
OC: Old space Capacity, old区容量的当前值(KB)
PGCMN: Permanent Generation Capacity MiNimum, 持久代容量的最小值(KB)
PGCMX: Permanent Generation Capacity MaXimum, 持久代容量的最大值(KB)
PGC: Permanent Generation Capacity, 持久代容量的当前值(KB)
PC: Permanent space Capacity, 持久代容量的当前值(KB)
YGC: Young Generation Garbage Collection events, Young GC次数
FGC: Full Garbage Collection events, Full GC次数
问题:为什么NGC可以小于NGCMN?
例如8. 监控GC原因. 在gcutil后加上gc原因列.
jstat -gccause pid 10000 5
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
0.00 50.00 68.24 91.44 75.28 154907 516.298 741 63.692 579.990 unknown GCCause No GC
50.00 0.00 51.18 91.53 75.28 154908 516.301 741 63.692 579.994 unknown GCCause No GC
0.00 50.00 34.47 91.62 75.28 154909 516.305 741 63.692 579.997 unknown GCCause No GC
50.00 0.00 16.64 91.71 75.28 154910 516.308 741 63.692 580.001 unknown GCCause No GC
50.00 0.00 84.97 91.71 75.28 154910 516.308 741 63.692 580.001 unknown GCCause No GC
S0: Survivor space 0, S0区使用量/S0区容量=S0区使用率.
S1: Survivor space 1, S1区使用量/S1区容量=S1区使用率.
E: Eden space, Eden区使用量/Eden区容量=Eden区使用率.
O: Old space, Old区使用量/Old区容量=Old区使用率.
P: Permanent space, Permanent区使用量/Permanent区容量=Permanent区使用率.
YGC: Young generation GC events, Young GC次数.
YGCT: Young generation garbage collection time, Young GC时间(毫秒).
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: Total garbage collection time, 总GC时间(毫秒).
LGCC: Last Garbage Collection Cause, 上次GC原因.
GCC: Garbage Collection Cause, 本次GC原因.
例如9. 监控新生代new generation的GC情况
jstat -gcnew pid 10000 5
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
128.0 128.0 64.0 0.0 1 15 128.0 2432.0 2065.1 154912 516.316
128.0 128.0 0.0 64.0 1 15 128.0 2432.0 2063.0 154913 516.319
128.0 128.0 64.0 0.0 1 15 128.0 2432.0 1655.0 154914 516.323
128.0 128.0 0.0 64.0 1 15 128.0 2432.0 1220.5 154915 516.327
128.0 128.0 64.0 0.0 1 15 128.0 2432.0 814.0 154916 516.331
S0C: Survivor space 0 Capacity, 当前survivor区0的容量(KB)
S1C: Survivor space 1 Capacity, 当前survivor区1的容量(KB)
S0U: Survivor space 0 Utilzation, survivor区0的使用量(KB)
S1U: Survivor space 1 Utilzation, survivor区1的使用量(KB)
TT: Tenuring Threshold, 存活次数. 达到最大存活次数后,才能晋升到旧生代(Old Generation)
MTT: Maximum Tenuring Thershold, 最大存活次数.
DSS: Desired Survivor Size (KB), 期望存活大小(KB)
EC: Eden space Capacity, 当前eden区的容量(KB)
EU: Eden space Utilzation, 当前eden区的使用量(KB)
YGC: Young Generation Garbage Collection events, Young GC次数
YGCT: Young Generation Garbage Collection Time, Young GC时间(毫秒)
例如10. 监控新生代new generation的最大值和使用情况
jstat -gcnewcapacity pid 10000 5
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154918 741
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154919 741
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154920 741
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154921 741
21120.0 337920.0 2688.0 128.0 112640.0 112640.0 128.0 337792.0 2432.0 154922 741
NGCMN: New Generation Capacity MiNimum, 新生代容量最小值(KB).
NGCMX: New Generation Capacity MaXimum, 新生代容量最大值(KB).
NGC: New Generation Capacity, 新生代容量当前值(KB).
S0CMX: Survivor space 0 Capacity MaXimum, 生存区0容量的最大值(KB).
S0C: Survivor space 0 Capacity, 生存区0容量(KB).
S1CMX: Survivor space 1 Capacity MaXimum, 生存区1容量的最大值(KB).
S1C: Survivor space 1 Capacity, 生存区1容量(KB).
ECMX: Eden space Capacity MaXimum, Eden区容量的最大值(KB).
EC: Eden Capacity, Eden区容量的当前值(KB).
YGC: Young generation GC events, Young GC次数.
FGC: Number of full GC events, Full GC次数.
问题:为什么S0CMX可以比S0C小?
例如11. 监控old代和持久代permanent的GC情况
jstat -gcold pid 10000 5
PC PU OC OU YGC FGC FGCT GCT
21248.0 15995.2 17600.0 16333.8 154923 741 63.692 580.047
21248.0 15995.2 17600.0 16349.8 154924 741 63.692 580.050
21248.0 15995.2 17600.0 16365.8 154925 741 63.692 580.054
21248.0 15995.2 17600.0 16381.8 154926 741 63.692 580.057
21248.0 15995.2 17600.0 16381.8 154926 741 63.692 580.057
PC: Permanent space Capacity, 持久区当前容量(KB).
PU: Permanent space Utilzation, 持久区使用量(KB).
OC: Old space Capacity, Old区当前容量(KB)
OU: Old space Utilzation, Old区使用量(KB)
YGC: Young generation GC events, Young GC次数.
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: total Garbage Collection Time, 总的GC时间(毫秒)
例如12. 监控old代的最大值和使用情况
jstat -gcoldcapacity pid 10000 5
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
42240.0 675840.0 17600.0 17600.0 154928 741 63.692 580.064
42240.0 675840.0 17600.0 17600.0 154929 741 63.692 580.068
42240.0 675840.0 17600.0 17600.0 154929 741 63.692 580.068
42240.0 675840.0 17600.0 17600.0 154930 741 63.692 580.072
42240.0 675840.0 17600.0 17600.0 154931 741 63.692 580.075
OGCMN: Old Generation Capacity MiNimum, 老生代容量最小值(KB).
OGCMX: Old Generation Capacity MaXimum, 老生代容量最大值(KB).
OGC: Old Generation Capacity, 老生代容量当前值(KB).
OC: Old space Capacity, 老生区当前容量(KB)
YGC: Young generation GC events, Young GC次数.
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: total Garbage Collection Time, 总的GC时间(毫秒)
例如13. 监控持久代permanent的最大值和使用情况
jstat -gcpermcapacity pid 10000 5
PGCMN PGCMX PGC PC YGC FGC FGCT GCT
21248.0 83968.0 21248.0 21248.0 154933 741 63.692 580.083
21248.0 83968.0 21248.0 21248.0 154934 741 63.692 580.086
21248.0 83968.0 21248.0 21248.0 154935 741 63.692 580.090
21248.0 83968.0 21248.0 21248.0 154935 741 63.692 580.090
21248.0 83968.0 21248.0 21248.0 154936 741 63.692 580.094
PGCMN: Permanent Generation Capacity MiNimum, 持久代容量最小值(KB).
PGCMX: Permanent Generation Capacity MaXimum, 持久代容量最大值(KB).
PGC: Permanent Generation Capacity, 持久代容量当前值(KB).
PC: Permanent space Capacity, 持久区容量当前值(KB).
YGC: Young generation GC events, Young GC次数.
FGC: Number of full GC events, Full GC次数.
FGCT: Full garbage collection time, Full GC时间(毫秒).
GCT: total Garbage Collection Time, 总的GC时间(毫秒)
例如14. 监控HotSpot的实时编译情况
jstat -printcompilation pid 10000 5
Compiled Size Type Method
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
643 754 1 org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy purgeAscending
Compiled: 编译的任务数
Size: 方法的bytecode的bytes数
Type: 编译类型
Method: 编译的方法对应的类型和方法名.
参考文献:
1. Sun HotSpot VM
2. Java SE 7: Reviewing JVM Performance Command Line Tools
3. jstat - Java Virtual Machine Statistics Monitoring Tool
4. JVM中的垃圾收集算法和Heap分区简记
相关推荐
创建数组时,JVM需要在堆中分配内存,并记录数组的大小和类型。访问数组元素则通过索引查找数组中的具体位置。 ##### 构造函数 构造函数用于初始化对象的状态。JVM通过调用特定的构造方法来完成这一过程。 #### ...
2. 运行时数据区:JVM将内存分为不同的区域,如方法区(存储类信息)、堆(存放对象实例)、栈(存储方法调用)、程序计数器(记录下一条要执行的指令地址)和本地方法栈(服务本地方法,如JNI调用)。 3. 执行引擎...
Java JVM(Java虚拟机)内存分配与调优是Java开发者必须掌握的重要技能,它涉及到程序的性能优化和稳定性。在Java应用中,JVM扮演着至关重要的角色,它负责解析字节码、管理内存以及执行线程等。本文将深入探讨JVM...
二、JVM内存管理 1. 堆内存:分为新生代和老年代,新生代采用复制算法,老年代采用标记-整理或标记-压缩算法。 2. 方法区:存储类的元数据,包括常量池、字段和方法数据等,HotSpot中的 PermGen 被移除,替换为 ...
《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...
#### 二、Java虚拟机(JVM)简介 Java虚拟机(JVM)是一种能够执行字节码(Bytecode)的虚拟机,其核心目标是实现跨平台兼容性。JVM拥有自己的硬件架构,包括处理器、堆栈、寄存器等,并具备一套完整的指令系统。 ##...
Java虚拟机(JVM)是Java语言的核心组成部分,它为Java程序提供了一个跨平台的运行环境。以下是对JVM相关知识点的详细解释: 1. **Java代码的执行过程**: - 开发人员编写的Java代码首先通过`javac`编译器转化为`....
【狂神说Java】JVM快速入门篇 Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行Java程序并提供与操作系统交互的接口。理解JVM的工作原理对于优化Java应用程序性能至关重要。本篇文章将从JVM的结构、内存模型...
堆存储对象实例,栈保存方法调用,方法区存储类信息,程序计数器记录下一条要执行的指令,本地方法栈则为Java Native Interface (JNI) 方法服务。 4. **垃圾收集**:JVM提供自动内存管理,通过垃圾收集器回收不再...
"Java JVM内存模型" Java虚拟机(JVM)内存模型是Java虚拟机的核心组件之一,它定义了Java程序在运行时的内存布局和管理方式。JVM内存模型主要分为五个部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区。 1. ...
堆内存用于存储对象实例,栈内存处理方法调用,方法区存储类信息,程序计数器记录下一条指令地址,本地方法栈服务于Java的Native方法。 三、JVM参数配置 优化JVM性能的关键在于正确设置JVM参数。这些参数包括初始堆...
**JAVA虚拟机(JVM)规范** JAVA虚拟机(JVM)是Java语言的核心组成部分,它为Java程序提供了运行环境,使得Java代码能在任何支持JVM的平台上运行,实现了“一次编写,到处运行”的目标。JVM规范定义了Java程序如何...
Java虚拟机(JVM)的内存回收,也称为垃圾收集(GC),是Java语言特性的重要组成部分,用于自动管理内存,释放不再使用的对象所占用的空间。虽然Java语言本身并不强制要求JVM实现GC,但现代JVM如Oracle的HotSpot JVM...
堆是存储对象实例的主要区域,栈则用于存储方法调用时的局部变量,方法区保存类信息,程序计数器记录下一条要执行的指令,本地方法栈服务于JNI(Java Native Interface)调用。 2. **垃圾回收**:Java的自动内存...
此外,JEP 323( Flight Recorder)提供了一套低开销的事件记录系统,用于收集诊断和分析数据,帮助开发者深入理解JVM内部的工作机制。 Java 11的JVM还增强了对变量处理的支持,如JEP 304(VarHandle)提供了一种...
Java虚拟机(JVM)是Java程序运行的基础,它负责解析字节码并管理程序的内存。本资料总结主要关注JVM内存分配及其运行原理,这对于理解和优化Java应用程序的性能至关重要。 1. **JVM内存结构** JVM内存分为几个...
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。在Java开发和面试中,JVM相关的知识是必不可少的一部分。下面,我们将深入探讨Java JVM的一些核心概念和面试常问问题。 1....
【狂神说JVM探究】是一份集合了多种格式的学习资料,主要涵盖了Java虚拟机(JVM)的基础知识。这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键...
二、JVM内存结构 JVM内存分为以下几个区域: 1. 堆(Heap):所有对象都在堆中创建,是所有线程共享的一块内存区域。 2. 方法区(Method Area):存储类的信息,如类名、方法信息等。 3. 程序计数器(PC Register)...
《JVM规范第二版》不仅是一部技术手册,更是一份历史见证,记录了Java虚拟机从无到有,再到成为全球范围内广泛应用的关键技术的过程。对于任何致力于深入理解Java内部机制、JVM工作原理及其实现的开发者来说,这份...