一、newratio是什麼
newratio是JVM中用於控制新生代與老年代內存分配比例的一個參數。在JVM啟動時,可以使用-XX:NewRatio參數進行設置,該參數默認值為2,即新生代佔據整個Java堆的1/3,老年代佔據2/3。
需要注意的是,該參數只對-XX:+UseParallelGC和-XX:+UseConcMarkSweepGC兩種垃圾回收器有效,對於使用-XX:+UseG1GC的垃圾回收器來說,該參數會自動計算得出。
二、newratio參數不起作用
在JVM啟動時,我們通過-Xmx和-Xms參數來設置Java堆的最大值和最小值。如果這兩個參數設定的值比newratio參數所計算出來的內存值還小,那麼newratio參數就不會生效。我們可以通過以下代碼來驗證這一點:
public class TestNewRatio { public static void main(String[] args) { byte[] b = null; for (int i = 0; i < 10; i++) { b = new byte[1024*1024]; } } }
三、newratio=2
當我們設置newratio為默認值2時,新生代和老年代的內存比例分別佔1/3和2/3。由於大多數應用的對象在創建時只經歷短暫的使用期,因此初始設置為newratio=2有利於提高應用程序的性能。
四、newratio=1
當我們設置newratio為1時,新生代和老年代的內存比例分別佔1/2和1/2。這種比例通常用於一些需要大量創建對象,但又不需要長期存儲對象的應用場景,如在線遊戲等。
五、newratio=3
當我們設置newratio為3時,新生代和老年代的內存比例分別佔1/4和3/4。這種比例通常用於一些長期存在的應用,比如Web服務器等。
六、newratio默認值
如果我們在啟動時不設置newratio參數,則JVM會默認使用2作為新生代和老年代內存比例的計算值。這個默認值通常可以滿足大多數應用場景的需求,在實際使用中比較常見。
七、newrational
newrational是一個虛擬機調優工具,可以幫助開發人員動態調整newratio參數,從而實現更加精準地內存分配。在使用newrational之前,需要保證JVM版本高於1.5,同時需要添加以下參數啟動JVM:
-XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Xloggc:./gc.log
八、newratio survivorratio
在JVM中,除了newratio參數外,還有一個參數與之相關,那就是survivor ratio參數。這個參數用於控制Eden區和Survivor區的比例。如果我們需要通過調整newratio參數來優化JVM性能,同時也需要注意survivor ratio參數的設置,以達到更好的效果。
九、newratio調低為1提高新生代選取
在實際的應用場景中,有時候我們需要將newratio參數調低到1,以提高新生代的選取。這樣做的好處是可以提高JVM在創建對象時的效率,但是會降低JVM垃圾回收的效率,需要慎重考慮。
代碼示例
下面是一個在JVM中通過改變newratio參數來優化性能的示例代碼:
public class TestNewRatio { public static void main(String[] args) { byte[] b = null; for (int i = 0; i < 10; i++) { b = new byte[1024*1024]; } } }
在運行該代碼時,我們可以通過以下命令來設置newratio參數:
-XX:NewRatio=1
通過這種方式,我們可以驗證newratio參數的有效性,並且在實際應用中動態調整該參數,以實現更好的JVM性能。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/283724.html