JVM內存參數調優大展神威

程序員小迷 2024-04-29 13:59:22

一、棧的大小缺省爲1M,可用參數 –Xss調整大小,例如-Xss256k

二、虛擬機加載的類信息,方法信息,常量(例如"abc","123"等),靜態變量(static變量)等數據的存儲配置:

1.jdk1.7及以前存儲在方法區/永久代:

-XX:PermSize=256m

-XX:MaxPermSize=512m

2.jdk1.8以後存儲在元空間Metaspace(放置在堆中):

-XX:MetaspaceSize=800m

-XX:MaxMetaspaceSize=1024m

jdk1.8以後理論最大大小只受本機總內存的限制。

三、堆

堆分爲新生代(Eden空間、From Survivor空間、To Survivor空間)、老年代(Tenured Generation空間)。

可以通過-XX:NewRatio、-XX:SurvivorRatio選項來配置年輕代和老年代的比例以及Survivor空間的比例。

Java垃圾回收機制只作用于堆區,對非堆區沒有作用。

-Xms100m:堆的最小值

-Xmx900m:堆的最大值

-Xmn200m:新生代的大小(一種簡寫,代表對下面2個參數同時配置)

-XX:NewSize=300m;新生代堆空間的默認值

-XX:MaxNewSize=800m:新生代堆空間最大值

-XX:NewRatio:一個整數,表示老年代和新生代的比值。例如,若 -XX:NewRatio=3,則新生代占整個堆的1/4,老年代占3/4。

-XX:SurvivorRatio:一個整數,用于指定新生代中Eden區域與Survivor區域的比值。例如,若-XX:SurvivorRatio=8,則一個Survivor區域的大小將是Eden區域大小的1/8。

四、直接內存

直接內存不是java虛擬機規範中定義的內存區域。如果使用了NIO,那麽直接內存會被使用。

直接內存是由java.nio包中的ByteBuffer.allocateDirect()方法分配的內存,這塊內存不受java堆大小限制,但受本機總內存的限制,所以也會出現OOM(Out Of Memory)內存溢出異常,可以通過-XX:MaxDirectMemorySize來設置(默認與堆內存最大值一樣)。

-XX:MaxDirectMemorySize=512m

五、代碼緩存

代碼緩存是即時編譯器JIT編譯的熱點方法的機器碼,可以提高JVM性能。

1)-XX:ReservedCodeCacheSize=400m

JVM分配給代碼緩存的總大小。

2)-XX:InitialCodeCacheSize=200m

JVM分配給代碼緩存的初始大小。

微風不燥,陽光正好,你就像風一樣經過這裏,願你停留的片刻溫暖舒心。

我是程序員小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等編程技術的技巧經驗分享),若作品對您有幫助,請關注、分享、點贊、收藏、在看、喜歡,您的支持是我們爲您提供幫助的最大動力。

歡迎關注。助您在編程路上越走越好!

0 阅读:35

程序員小迷

簡介:致力于Android、C等編程技術的技巧經驗分享