1. 程式人生 > >java虛擬機器學習01——jvm引數

java虛擬機器學習01——jvm引數

在看《深入理解java虛擬機器》的時候,我對書中使用的到許多jvm引數不是很瞭解,在這裡記錄下常用的jvm引數,以後遇到新的命名也會在這更新

首先說下jvm引數如何使用,我這裡用的是Myeclipse,右鍵程式Run as -> Run Configuration,這裡一定要說下,在左側的java application中找到自己的入口類,如果沒有,就雙擊java application,一般就能刷新出來了,剩下的就簡單了,Arguments中找到VM arguments,在這裡輸入jvm引數

接下來說說jvm引數,首先從幾個常用的說起

Xms20m -Xmx20m
java堆的初始大小為20m,最大為20m
-XX:PermSize=10M -XX:MaxPermSize=10M
永久代的初始大小為10M,最大值為10M
-Xss128k
每個執行緒棧區的大小
-XX:SurvivorRatio=8
設定Eden和Suvivor區的比例為8:1,注意這裡是Eden和一個Suvivor區的比例,為什麼要有兩個Survivor以後的文章會解釋
XX:NewRatio=4
表示老年代與年輕代的比值,如果用-Xmn設定過了年輕代大小,就不要設定這個值了
-verbose:gc 或者-XX:+printGC
打印出gc執行的簡要資訊,這裡要說下如何讀懂gc的日誌資訊,假設有以下gc日誌:

20: [GC [DefNew: 10K->2K(20K), 1 secs] 15K->5K(50K), 1.5 secs]

20表示從java虛擬機器啟動以來的時間
DefNew表示用的Serial收集器對新生代的垃圾回收
10K->2K(20K), 1 secs表示新生代當前使用空間gc後從10K降低2K,括號裡的20K表示該空間(新生代)的總記憶體,1secs表示gc用了1秒
15K->5K(50K):GC前Java堆已使用容量->GC後Java堆已使用容量(Java堆總容量)

-XX:+PrintGCDetails
列印gc執行的詳細資訊,詳細資訊的日誌會和上面不一樣,如以下形式:

PSYoungGen      total 9216K, used 7143K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
eden space 8192K, 87% used [0x00000000ff600000,0x00000000ffcf9fb8,0x00000000ffe00000)
from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)

PSYoungGen:使用Parallel Scavenge收集器對新生代gc

[0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)分別表示新生代在記憶體中的低邊界值,當前位置,高邊界值

新生代分配的大小 = eden space + from space + to space 不等於 9216,目前還不懂為什麼不等

以上是我遇到的jvm引數以及如何讀懂gc日誌,後續更新......