我是🌟廖志偉🌟,一名🌕Java開發工程師🌕、📝Java領域優質創作者📝、🎉CSDN博客專家🎉、🌹幕后大佬社區創始人🌹。擁有多年一線研發經驗,研究過各種常見框架及中間件的底層源碼,對於大型分布式、微服務、三高架構(高性能、高並發、高可用)有過實踐架構經驗。
🍊博主:java_wxid
🍊博主:Java廖志偉
🍊社區:幕后大佬
本文的大概內容:
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學習路線圖
P6學習路線圖
P7學習路線圖
P8學習路線圖
以上四張圖詳細介紹了作為Java開發工作者所需要具備的知識技能,同學們學廢了嘛,有想法系統學習的同學可以私聊我,🎉歡迎關注🔎點贊👍收藏⭐️留言📝。
🍊博主:java_wxid
🍊博主:Java廖志偉
🍊社區:幕后大佬