Java虛擬機參數

-XX:+PrintGC 簡單的GC信息
-XX:+PrintGCDetail 詳細的GC信息
-XX:+PrintGCTimeStamps GC的發生時間
-XX:+PrintGCApplicationConcurrentTime 應用程序的執行時間
-XX:+PrintGCApplicationStoppedTime  GC的STW的停頓時間
-Xloggc:xxxx/gc.log 指定GC的log的路徑
-XX:+TraceClassLoading 可用顯示有哪些類被加載
-XX:+TraceClassUnloading 可用來顯示哪些類被卸載
-XX:+PrintCommandLineFlags  用來顯示命令行輸入哪些參數

堆相關參數
-Xms 當前內存的最小值
-Xmx 當前內存的最大值

java -Xmx20M -Xms5m xxx.class
在實際的工作用,可用直接將初始堆-Xms與最大堆-Xmx設置相等。這樣的好處是可以減少程序運行時進行的垃圾回收次數,從而提高程序的性能。

-Xmn 可以設置新生代的大小。設置一個較大的新生代會減小老年代的大小,這個參數對系統的性能以及GC行爲有很大的影響。新生代的大小一般建議設置爲整個堆空間的1/3到1/4左右。
-XX:SurvivorRatio=eden/from=eden/to 用來設置新生代中eden空間和from/to空間的比例關係。
-Xmn的大小基本就是等於 eden + from + to的大小

java -Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails
這裏表示的eden的空間大小是from的空間的兩倍。

-XX:NewRatio=老年代/新生代
-Xmx20M -Xms20M -XX:NewRatio=2 -XX:+PrintGCDetails

-XX:+HeapDumpOnOutOfMemeoryError 在內存溢出的時候,導出整個堆的信息
-XX:HeapDumpPath 指定導出堆文件存放路徑

方法區的配置
JDK 1.7 -XX:PermSize和-XX:MaxPermSize
JDK 1.8 -XX:MetaspaceSize 和-XX:MaxMetaspaceSize

棧配置
-Xss 指定線程棧的大小

直接內存
直接內存是Java程序中非常重要的組成部分,特別是在NIO中被廣泛使用。直接內存跳過了Java堆,使Java程序可以直接訪問原生堆空間。但是,直接內存也不是說一定可以提高內存訪問速度,不能這麼武斷的認爲。
直接內存的申請速度是遠遠低於堆空間的申請速度。

-XX:MaxDirectMemorySize 最大直接內存空間。
如果不設置,默認爲最大堆空間, 即-Xmx。當直接內存使用量達到了-XX:MaxDirectMemeorySize的時候,就會觸發垃圾回收。
如果垃圾回收不能有效釋放足夠空間,直接內存溢出依然會引起系統的OOM。

Client和Server模式選擇
通過Java -version來查看系統是選擇什麼模式來運行。虛擬機在Server模式下回嘗試收集更多的系統信息,使用更復雜的優化算法對程序進行優化,因此,當系統完全啓動並進入運行穩定期後,Server模式的執行速度回遠遠快於Client模式。所以,長期運行的後臺系統,建議使用Server模式。

java -server xxxx
發佈了73 篇原創文章 · 獲贊 35 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章