【JVM參數調優】


我是🌟廖志偉🌟,一名🌕Java開發工程師🌕、📝Java領域優質創作者📝、🎉CSDN博客專家🎉、🌹幕后大佬社區創始人🌹。擁有多年一線研發經驗,研究過各種常見框架中間件的底層源碼,對於大型分布式微服務、三高架構(高性能高並發高可用)有過實踐架構經驗。

🍊博主:java_wxid
🍊博主:Java廖志偉
🍊社區:幕后大佬



本文的大概內容:

JVM參數調優

jvm

調優原則

  • GC的時間足夠的小
  • GC的次數足夠的少
  • 發生Full GC的周期足夠的長
  • 針對JVM堆的設置,一般可以通過-Xms -Xmx限定其最小、最大值,為了防止垃圾收集器在最小、最大之間收縮堆而產生額外的時間,我們通常把最大、最小設置為相同的值。
  • 年輕代和年老代將根據默認的比例(1:2)分配堆內存,可以通過調整二者之間的比率NewRadio來調整二者之間的大小,也可以針對回收代,比如年輕代,通過 -XX:newSize -XX:MaxNewSize來設置其絕對大小。同樣,為了防止年輕代的堆收縮,我們通常會把-XX:newSize -XX:MaxNewSize設置為同樣大小。
  • 年輕代和年老代設置多大才算合理? 如果應用存在大量的臨時對象,應該選擇更大的年輕代;如果存在相對較多的持久對象,年老代應該適當增大。Full GC盡量少,讓年老代盡量緩存常用對象,JVM的默認比例1:2也是這個道理。通過觀察應用一段時間,看其他在峰值時年老代會占多少內存,在不影響Full GC的前提下,根據實際情況加大年輕代,比如可以把比例控制在1:1。但應該給年老代至少預留1/3的增長空間。

查看參數

jps -l 查看進程編號
jinfo -flag 具體參數 java進程編號
jinfo -flags 具體參數
查看JVM出廠默認設置:java -XX:+PrintFlagsInitial
查看JVM修改更新的內容:java -XX:+PrintFlagsFinal -version
查看默認垃圾回收器:java -XX:+PrintCommandLineFlags -version

常用參數

-Xmx(-XX:MaxHeapSize):初始大小內存:初始化的值是物理內存的四分之一
-Xms(-XX:InitialHeapSize):最大分配內存:初始化的值是物理內存的六十四分之一
-Xss(-XX:ThreadStackSize):設置單個線程棧的大小,一般默認為512k~1024k
-Xmn:設置年輕代的大小
-XX:MetaspaceSize:設置元空間大小 元空間的本質和永久代類似,都是對JVM規范中方法區的實現。不過元空間與永久代之間的區別在於:元空間不在虛擬機中,而是在本地內存中,默認情況下,元空間的大小僅受本地內存限制。

實戰

-Xms 128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC
解析:

  • -Xms 128m:初始內存128M
  • -Xmx4096m :最大堆內存4G
  • -Xss1024k:初始棧大小1024K
  • -XX:MetaspaceSize=512m:元空間512M
  • -XX:+PrintCommandLineFlags:打印默認參數
  • -XX:+PrintGCDetails :打印GC回收的細節
  • -XX:+UseSerialGC:串行垃圾回收器
  • -XX:+PrintGCDetails命令打印的
  • -XX:SurvivorRatio:設置新生代中eden和S0/S1空間的比例。
  • -XX:NewRatio:配置年輕代與老年代在堆結構的占比。
  • -XX:MaxTenuringThreshold:設置垃圾的最大年齡,java8之后這個值最大只能設置為15,最低是0

默認新生區比例:-XX:SurvivorRatio=8,Eden:S0:S1=8:1:1;

  • 假如:-XX:SurvivorRatio=4,Eden:S0:S1=4:1:1。SurvivorRatio的值就是設置eden去的比例占多少,S0和S1相同。
  • 假如:-XX:NewRatio=2新生代占1,老年代2,年輕代占整個堆的1/3。
  • 假如:-XX:NewRatio=4新生代占1,老年代占4,年輕帶占整個堆的1/5。NewRatio的值就是設置老年代的占比,剩下的1給新生代。

總結

以上就是今天要講的內容,還希望各位讀者大大能夠在評論區積極參與討論,給文章提出一些寶貴的意見或者建議📝,合理的內容,我會采納更新博文,重新分享給大家。

🙏四連 關注🔎點贊👍收藏⭐️留言📝

感謝大家的支持,用心寫博文分享給大家,你的支持(🔎點贊👍收藏⭐️留言📝)是對我創作的最大幫助。
🍊微信公眾號:南北踏塵
🍊主頁地址:java_wxid
🍊社區地址:幕后大佬

給讀者大大的話

我本身是一個很普通的程序員,放在人堆里,除了與生俱來的🌹盛世美顏🌹、所剩不多的發量,就剩下180的大高個了。就是我這樣的一個人,默默堅持寫博文也有好多年了,有句老話說的好,🌕牛逼之前都是傻逼式的堅持🌕。希望自己可以通過大量的作品,時間的積累,個人魅力、運氣和時機,可以打造屬於自己的🌟技術影響力🌟。同時也希望自己可以成為一個🎄懂技術🎄,🎄懂業務🎄,🎄懂管理🎄的綜合型人才,作為項目架構路線的總設計師,掌控全局的🌕團隊大腦🌕,技術團隊中的🍊絕對核心🍊是我未來幾年不斷前進的目標。


提示:以下都是資源分享,求個一鍵三連。

面試資料

福利大放送,🎉歡迎關注🔎點贊👍收藏⭐️留言📝,拜托了🙏,這對我真的很重要。
點擊:面試資料
提取碼:2021

200套PPT模板

福利大放送,🎉歡迎關注🔎點贊👍收藏⭐️留言📝,拜托了🙏,這對我真的很重要。
點擊:200套PPT模板
提取碼:2021

提問的智慧

福利大放送,🎉歡迎關注🔎點贊👍收藏⭐️留言📝,拜托了🙏,這對我真的很重要。
點擊:提問的智慧
提取碼:2021

Java開發學習路線

名稱 鏈接
JavaSE 點擊: JavaSE
MySQL專欄 點擊: MySQL專欄
JDBC專欄 點擊: JDBC專欄
MyBatis專欄 點擊: MyBatis專欄
Web專欄 點擊: Web專欄
Spring專欄 點擊: Spring專欄
SpringMVC專欄 點擊: SpringMVC專欄
SpringBoot專欄 點擊: SpringBoot專欄
SpringCould專欄 點擊: SpringCould專欄
Redis專欄 點擊: Redis專欄
Linux專欄 點擊: Linux專欄
Maven3專欄 點擊: Maven3專欄
Spring Security5專欄 點擊: Spring Security5專欄
更多專欄 更多專欄,請到 java_wxid主頁 查看

P5學習路線圖
p5學習路線圖P6學習路線圖
P6學習路線圖P7學習路線圖
P7學習路線圖P8學習路線圖
P8學習路線圖

以上四張圖詳細介紹了作為Java開發工作者所需要具備的知識技能,同學們學廢了嘛,有想法系統學習的同學可以私聊我,🎉歡迎關注🔎點贊👍收藏⭐️留言📝。
🍊博主:java_wxid
🍊博主:Java廖志偉
🍊社區:幕后大佬


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM