之后寫的東西就會用到虛擬機參數了,現在這里匯個總自己平時用到的、看到的一些虛擬機參數。現在看不懂沒關系,反正之后都會用到的:
(1)-Xms20M
表示設置JVM啟動內存的最小值為20M,必須以M為單位
(2)-Xmx20M
表示設置JVM啟動內存的最大值為20M,必須以M為單位。將-Xmx和-Xms設置為一樣可以避免JVM內存自動擴展。大的項目-Xmx和-Xms一般都要設置到10G、20G甚至還要高
(3)-verbose:gc
表示輸出虛擬機中GC的詳細情況
(4)-Xss128k
表示可以設置虛擬機棧的大小為128k
(5)-Xoss128k
表示設置本地方法棧的大小為128k。不過HotSpot並不區分虛擬機棧和本地方法棧,因此對於HotSpot來說這個參數是無效的
(6)-XX:PermSize=10M
表示JVM初始分配的永久代的容量,必須以M為單位
(7)-XX:MaxPermSize=10M
表示JVM允許分配的永久代的最大容量,必須以M為單位,大部分情況下這個參數默認為64M
(8)-Xnoclassgc
表示關閉JVM對類的垃圾回收
(9)-XX:+TraceClassLoading
表示查看類的加載信息
(10)-XX:+TraceClassUnLoading
表示查看類的卸載信息
(11)-XX:NewRatio=4
表示設置年輕代:老年代的大小比值為1:4,這意味着年輕代占整個堆的1/5
(12)-XX:SurvivorRatio=8
表示設置2個Survivor區:1個Eden區的大小比值為2:8,這意味着Survivor區占整個年輕代的1/5,這個參數默認為8
(13)-Xmn20M
表示設置年輕代的大小為20M
(14)-XX:+HeapDumpOnOutOfMemoryError
表示可以讓虛擬機在出現內存溢出異常時Dump出當前的堆內存轉儲快照
(15)-XX:+UseG1GC
表示讓JVM使用G1垃圾收集器
(16)-XX:+PrintGCDetails
表示在控制台上打印出GC具體細節
(17)-XX:+PrintGC
表示在控制台上打印出GC信息
(18)-XX:PretenureSizeThreshold=3145728
表示對象大於3145728(3M)時直接進入老年代分配,這里只能以字節作為單位
(19)-XX:MaxTenuringThreshold=1
表示對象年齡大於1,自動進入老年代
(20)-XX:CompileThreshold=1000
表示一個方法被調用1000次之后,會被認為是熱點代碼,並觸發即時編譯
(21)-XX:+PrintHeapAtGC
表示可以看到每次GC前后堆內存布局
(22)-XX:+PrintTLAB
表示可以看到TLAB的使用情況
(23)-XX:+UseSpining
開啟自旋鎖
(24)-XX:PreBlockSpin
更改自旋鎖的自旋次數,使用這個參數必須先開啟自旋鎖
怎么用MyEclipse設置虛擬機參數
右鍵類-->Run as-->Run Configurations...

Java Application里面選到自己的類,選擇Arguments,VM arguments空白部分就可以設置虛擬機參數了。如果點擊了Run Configurations沒有出現自己的類的話也沒關系,雙擊一下Java Application就好了

后記
Java虛擬機參數有上百個,性能調優中很大一塊就是選擇這上百個參數中的某些重要參數進行設置,並且根據項目運行情況對參數進行不斷調整以求達到一個性能最佳點。性能調優說有捷徑也有捷徑,百度搜一份別人推薦的JVM參數設置改改就好了,那至於具體好不好就說不上了,但起碼保證能用吧;性能調優說沒捷徑也沒捷徑,如果對JVM的性能有嚴苛的要求並且希望細化到每一個小點,達到能達到的最佳值,那首先就必須對於Java虛擬機,對於每一個虛擬機參數有着深刻的理解才行。最近幾年興起了一個叫做性能調優師的職位,也證明了性能優化的重要性,反正從個人的角度看,性能調優絕對是一門學問,不是那么簡單的,打好基礎才是王道。
