0 概述
java 虛擬機有很多參數可以讓我們去根據自己實際場景去設置,往往不同參數對系統性能也影響較大,本文主要介紹jvm常用的參數。
1 jvm 參數種類
- - (如-server)標準參數,所有的jvm都應該支持
- -X (如-Xms4g)非標準,每個jvm實現方式可能不同
- -XX (如 -XX:PermSize=96m)不穩定參數,下一個版本可能會取消
可以使用java -XX:+PrintFlagsInitial查詢默認的虛擬機參數。
2 常見的堆相關設置
整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小爲64m,所以增大年輕代後,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置爲整個堆的3/8。
- -Xms 設置初始 Java 堆大小,如設置初始爲4g,-Xms4g
- -Xmx 設置最大的java堆大小,如設置最大堆大小爲4g,-Xmx4g
在生產環境上一般將這兩個值設爲相同,以減少運行期間系統在內存申請上所花的開銷。 - -Xmn 設置年輕代大小,如設置年輕代大小爲2g,-Xmn2g
-Xmn 和 -XX:Newsize 區別,前者是設置堆中新生代大小。後者是設置新生代初始大小-Xmn 是將NewSize與MaxNewSize設爲一致。 - -XX:SurvivorRatio=10 設置年輕代Eden區和Survivor區(注意有兩個)的比值,這裏10 表示Eden:Survivor1:Survivor2=10:1:1
- -XX:PermSize=96m -XX:MaxPermSize=256m 設置永久區初始大小爲96M,最大爲256M
- -XX:+HeapDumpOnOutOfMemoryError 讓JVM在發生內存溢出時自動的生成堆內存快照
- XX:HeapDumpPath=/home/hsc/log/java.hprof 設置內存快照的路徑
3 收集器設置
- -XX:+UseSerialGC 使用Serial收集器(串行收集器)
- -XX:+UseParallelGC 使用Parallel收集器(並行收集器)
- -XX:+UseConcMarkSweepGC 使用CMS 收集器(設置併發收集器)
4 垃圾回收統計信息
- -verbose:gc 輸出GC的詳細信息。
- -Xloggc:/home/hsc/log/gc.log 將 GC 狀態記錄在文件中 (帶時間戳)
- XX:+PrintGCDetails 打印出GC的詳細信息
- -XX:+PrintGCDateStamps GC發生的時間信息