jvm內存:如圖從左到右依次爲 jvm堆: java
[ (新生代)PSYoungGen:{ Eden\S0(form)\S1(to) } \ (老年代)ParOldGen:{ Old Memory} ] \ (方法區/持久區)Perm \ 再後就是系統內存了 shell
-XX:+PrintFlagsFinal //查看jvm全部的系統參數值 jvm
-XX:PrintVMOptions //查看你當前指定的參數 spa
如 java -Xmx20M -XX:+PrintVMOptions -XX:+PrintGC jvm.Test 20 日誌
VM option '+PrintVMOptions' VM option '+PrintGC'
如:java -Xmx20M -XX:+PrintCommandLineFlags -XX:+PrintGC jvm.Test 20 code
-XX:InitialHeapSize=20971520 //系統指定 -XX:MaxHeapSize=20971520 //系統指定 -XX:+PrintCommandLineFlags //用戶指定 -XX:+PintGC //... -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
-XX:PrintGC //輸出GC處理信息 orm
package jvm; public class Test { public static void main(String[] args) { int length = Integer.parseInt(args[0]); for (int i = 0; i < length; i++) { byte[] a = new byte[1*1024*1024]; } //單位bytes System.out.println("maxMemory"+Runtime.getRuntime().maxMemory()/1000/1000+"M"); System.out.println("maxMemory"+Runtime.getRuntime().freeMemory()/1000/1000+"M"); System.out.println("maxMemory"+Runtime.getRuntime().totalMemory()/1000/1000+"M"); } }java -Xmx10M -XX:+PrintGC jvm.Test 5
[GC 1642K->576K(9728K), 0.0165492 secs]
[GC 2708K->520K(9728K), 0.0012726 secs] 隊列
輸出說明: [2708K->520K] 指原有2708K 回收後變成 520K; [9728K] 可用堆空間總和大約爲10M; 最後是GC所花的時間 內存
-XX:+PrintGCDetails //GC更加詳細的信息 get
java -Xmx20M -XX:+PrintGCDetails jvm.Test 20
[GC [PSYoungGen: 5831K->496K(6656K)] 5831K->576K(19968K), 0.0014249 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC [PSYoungGen: 5806K->472K(6656K)] 5886K->552K(19968K), 0.0008980 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [GC [PSYoungGen: 5636K->440K(6656K)] 5716K->520K(19968K), 0.0019736 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] Heap PSYoungGen total 6656K, used 5712K [0x00000000ff900000, 0x0000000100000000, 0x0000000100000000) eden space 6144K, 85% used [0x00000000ff900000,0x00000000ffe261e8,0x00000000fff00000) from space 512K, 85% used [0x00000000fff00000,0x00000000fff6e010,0x00000000fff80000) to space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000) ParOldGen total 13312K, used 80K [0x00000000fec00000, 0x00000000ff900000, 0x00000000ff900000) object space 13312K, 0% used [0x00000000fec00000,0x00000000fec14000,0x00000000ff900000) PSPermGen total 21504K, used 2549K [0x00000000f9a00000, 0x00000000faf00000, 0x00000000fec00000) object space 21504K, 11% used [0x00000000f9a00000,0x00000000f9c7d570,0x00000000faf00000)
輸出說明:
[user] 用戶CPU耗時 [sys] 系統cpu耗時 [real] GC實際經歷時間; GC的打印信息能夠看到只對新生代作了內存回收
下面是jvm內存的信息了
新生代 可用空間爲 6656K(eden+from) 用了 5712k [下界,當前上界,上界]
--當前空間的最大值:用上界減下界就能獲得 ,如新生代空間 (0x0000000100000000 - 0x00000000ff900000)/1024 = eden + from + to = 6656+512 = 7168
--當前空間分配的大小 : 用當前上界減去下界; 若是當前上界等於下界,說明當前的堆空間沒有擴大的可能
-XX:+PrintHeapAtGc 打印更加全面的堆信息(略)
-XX:+PrintGCTimeStamps 分析GC發生的時間
-XX:+PrintGCApplicationConcurrentTime 打印應用程序的執行時間
-XX:+PrintGCApplicationStoppedTime 打印應用程序因爲GC而產生的停頓時間
-XX:+PrintReferenceGC 跟蹤系統內的軟引用、弱引用、虛引用和Finallize隊列
-Xloggc 將GC的日誌以文件的形式輸出如: java -Xmx20M -Xloggc:E:/gc.log jvm.Test 20
-verbose:class 等價於 -XX:TraceClassLoading -XX:TraceClassUnloading //跟蹤類的加載與卸載
-XX:+PrintClassHistogram 查看系統中類的分佈狀況; 運行後在控制後按Ctrl+Break