1.概述
在本篇文章中,你將掌握最常用的 JVM 參數(shù)配置。如果對于下面提到了一些概念比如堆、
2.堆內(nèi)存相關
Java 虛擬機所管理的內(nèi)存中最大的一塊,Java 堆是所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機啟動時創(chuàng)建。此內(nèi)存區(qū)域的唯一目的就是存放對象實例,幾乎所有的對象實例以及數(shù)組都在這里分配內(nèi)存。
2.1.顯式指定堆內(nèi)存–Xms和-Xmx
與性能有關的最常見實踐之一是根據(jù)應用程序要求初始化堆內(nèi)存。如果我們需要指定最小和最大堆大?。ㄍ扑]顯示指定大小),以下參數(shù)可以幫助你實現(xiàn):
-Xms<heap size>[unit]
-Xmx<heap size>[unit]
- heap size 表示要初始化內(nèi)存的具體大小。
- unit 表示要初始化內(nèi)存的單位。單位為***“ g”*** (GB) 、“ m”(MB)、“ k”(KB)。
舉個栗子??,如果我們要為JVM分配最小2 GB和最大5 GB的堆內(nèi)存大小,我們的參數(shù)應該這樣來寫:
-Xms2G -Xmx5G
2.2.顯式新生代內(nèi)存(Young Ceneration)
根據(jù)Oracle官方文檔,在堆總可用內(nèi)存配置完成之后,第二大影響因素是為 Young Generation
在堆內(nèi)存所占的比例。默認情況下,YG 的最小大小為 1310 MB,最大大小為無限制。
一共有兩種指定 新生代內(nèi)存(Young Ceneration)大小的方法:
1.通過-XX:NewSize
和-XX:MaxNewSize
指定
-XX:NewSize=<young size>[unit]
-XX:MaxNewSize=<young size>[unit]
舉個栗子??,如果我們要為 新生代分配 最小256m 的內(nèi)存,最大 1024m的內(nèi)存我們的參數(shù)應該這樣來寫:
-XX:NewSize=256m
-XX:MaxNewSize=1024m
2.通過-Xmn<young size>[unit]
指定
舉個栗子??,如果我們要為 新生代分配256m的內(nèi)存(NewSize與MaxNewSize設為一致),我們的參數(shù)應該這樣來寫:
-Xmn256m
GC 調(diào)優(yōu)策略中很重要的一條經(jīng)驗總結是這樣說的:
將新對象預留在新生代,由于 Full GC 的成本遠高于 Minor GC,因此盡可能將對象分配在新生代是明智的做法,實際項目中根據(jù) GC 日志分析新生代空間大小分配是否合理,適當通過“-Xmn”命令調(diào)節(jié)新生代大小,最大限度降低新對象直接進入老年代的情況。
另外,你還可以通過**-XX:NewRatio=<int>
**來設置新生代和老年代內(nèi)存的比值。
比如下面的參數(shù)就是設置新生代(包括Eden和兩個Survivor區(qū))與老年代的比值為1。也就是說:新生代與老年代所占比值為1:1,新生代占整個堆棧的 1/2。
-XX:NewRatio=1
2.3.顯示指定永久代/元空間的大小
從Java 8開始,如果我們沒有指定 Metaspace 的大小,隨著更多類的創(chuàng)建,虛擬機會耗盡所有可用的系統(tǒng)內(nèi)存(永久代并不會出現(xiàn)這種情況)。
JDK 1.8 之前永久代還沒被徹底移除的時候通常通過下面這些參數(shù)來調(diào)節(jié)方法區(qū)大小
-XX:PermSize=N //方法區(qū) (永久代) 初始大小
-XX:MaxPermSize=N //方法區(qū) (永久代) 最大大小,超過這個值將會拋出 OutOfMemoryError 異常:java.lang.OutOfMemoryError: PermGen
相對而言,垃圾收集行為在這個區(qū)域是比較少出現(xiàn)的,但并非數(shù)據(jù)進入方法區(qū)后就“永久存在”了。
JDK 1.8 的時候,方法區(qū)(HotSpot 的永久代)被徹底移除了(JDK1.7 就已經(jīng)開始了),取而代之是元空間,元空間使用的是直接內(nèi)存。
下面是一些常用參數(shù):
-XX:MetaspaceSize=N //設置 Metaspace 的初始(和最小大?。?/span>
-XX:MaxMetaspaceSize=N //設置 Metaspace 的最大大小,如果不指定大小的話,隨著更多類的創(chuàng)建,虛擬機會耗盡所有可用的系統(tǒng)內(nèi)存。
3.垃圾收集相關
3.1.垃圾回收器
為了提高應用程序的穩(wěn)定性,選擇正確的垃圾收集算法至關重要。
JVM具有四種類型的GC實現(xiàn):
- 串行垃圾收集器
- 并行垃圾收集器
- CMS垃圾收集器
- G1垃圾收集器
可以使用以下參數(shù)聲明這些實現(xiàn):
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+USeParNewGC
-XX:+UseG1GC
有關垃圾回收實施的更多詳細信息,請參見此處。
3.2.GC記錄
為了嚴格監(jiān)控應用程序的運行狀況,我們應該始終檢查JVM的垃圾回收性能。最簡單的方法是以人類可讀的格式記錄GC活動。文章來源:http://www.zghlxwxcb.cn/news/detail-655519.html
使用以下參數(shù),我們可以記錄GC活動:文章來源地址http://www.zghlxwxcb.cn/news/detail-655519.html
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=< number of log files >
-XX:GCLogFileSize=< file size >[ unit ]
-Xloggc:/path/to/gc.log
到了這里,關于JVM——JVM參數(shù)指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!