Java reservedcodecachesize虛擬機(jī)參數(shù)案例詳解
一、reservedcodecachesize參數(shù)介紹
該參數(shù)是JvM虛擬機(jī)調(diào)優(yōu)中調(diào)整內(nèi)存大小的一個設(shè)置參數(shù),值得大小設(shè)置直接影響到Code Cache的大小,而jvm編譯的代碼有常常存放在Code Cache中,而Code Cache的空間內(nèi)存又支撐著jvm的正常運(yùn)行,如果該空間不足jvm虛擬機(jī)將會發(fā)生問題,并且性能持續(xù)降低。
Code Cache就是所謂的代碼緩存,由于JVM虛擬機(jī)的內(nèi)存默認(rèn)是有大小限制的,因此代碼緩存區(qū)域肯定也是有一定大小限制,一般的Windows電腦上64位系統(tǒng)下它的默認(rèn)大小應(yīng)該是48M,如果代碼緩存已滿則jvm在編譯代碼時的優(yōu)化設(shè)置就會被禁用,這也就是為什么jvm性能會持續(xù)降低的原因。

合理的調(diào)整該reservedcodecachesize值設(shè)置的大小就可以達(dá)到令JVM虛擬機(jī)不斷調(diào)優(yōu)不斷進(jìn)行優(yōu)化而達(dá)到高性能執(zhí)行的目的。
二、該參數(shù)如何設(shè)置與調(diào)優(yōu)
1)reservedcodecachesize調(diào)優(yōu)說明
在學(xué)會如何設(shè)置該參數(shù)值得大小與如何調(diào)用之前,我們首先要明白一個問題,就是jvm虛擬機(jī)本身默認(rèn)的配置已經(jīng)是非常合理的了,若非遇到性能瓶頸的情況下,是不需要進(jìn)行調(diào)整該值的大小的。
即便設(shè)置該值的大小也是需要根據(jù)本機(jī)本地電腦系統(tǒng)內(nèi)存的總大小作為參考指導(dǎo),也就是說該值調(diào)整需要根據(jù)電腦系統(tǒng)的內(nèi)存來做出判斷的,并沒有固定的值。
我們的項目在生產(chǎn)環(huán)境中平時運(yùn)行的很好,然而經(jīng)常會遇到性能問題的時候,我們才會考慮配置jvm的參數(shù),調(diào)整虛擬機(jī)性能的最大化。
2)如何判斷reservedcodecachesize的大小導(dǎo)致的性能降低
那么問題來了,我們該如何判斷是由于該參數(shù)默認(rèn)值太小導(dǎo)致代碼緩存已滿而造成的性能有問題呢?這時我們可以查看JVM的運(yùn)行日志,它的日志中會顯示出下面截圖中的警告信息,警告我們代碼緩存已滿。此時jvm的編譯器就會被禁止使用,因此代碼編譯停止直接導(dǎo)致jvm運(yùn)行速度迅速下降。

如果發(fā)現(xiàn)上圖中的警告消息,說明我們就該設(shè)置該參數(shù)的值調(diào)整其大小。
3)調(diào)整該參數(shù)值得大小進(jìn)行調(diào)優(yōu)
接下來就是reservedcodecachesize參數(shù)值調(diào)整其大小進(jìn)行性能調(diào)優(yōu)的重中之重了,我們上文中也提到過了調(diào)整該值的大小是根據(jù)本地內(nèi)存的做參考依據(jù)的,這里的設(shè)置只能有一定的參考意義,并不適用每一臺機(jī)器。
只要報上圖中的警告信息就說明代碼緩存空間太小不夠用,因此需要將值調(diào)大,其次jvm的垃圾回收期是不會回收代碼緩存空間的,隨著jvm運(yùn)行時間不斷的增加,該值得空間可用緩存也會越來越少。
因此解決辦法有兩個,我們可以從下面這兩方面進(jìn)行,根據(jù)工作經(jīng)驗以及生產(chǎn)經(jīng)驗來看,一般將該值的大小調(diào)整為256兆,具體代碼如下:
XX:ReservedCodeCacheSize=256m
另一個方面我們就可以配置jvm的垃圾回收機(jī)制去回收代碼緩存空間,開啟代碼如下:
XX:+UseCodeCacheFlushing
三、jvm虛擬機(jī)其它參數(shù)詳解
1)-Xms -Xmx參數(shù)詳解
-Xms和-XMx兩個參數(shù)分別指代jvm初始分配的內(nèi)存大小和JVM能夠分配到堆內(nèi)存上限的最大值,常用的標(biāo)記單位一般是M或者g。
我們在jvm啟動時可以設(shè)置合理的這兩個參數(shù)的值的大小,其實jvm也會自動調(diào)整堆內(nèi)存的大小,所以當(dāng)看到實際的值與我們設(shè)定的值不一致的時候,不要驚慌,那是因為jvm在動態(tài)的調(diào)整。
2)-XX:PermSize and -XX:MaxPermSize參數(shù)詳解
上面的兩個參數(shù)分別指代非堆內(nèi)存的初始化最小值以及非堆內(nèi)存的上限最大值,當(dāng)jvm中堆空間的大小過小,或者是小于50%時就會發(fā)出警告,報堆內(nèi)存太小的警告信息,此時一般就是指的PermSize的值太小,我們可以適當(dāng)?shù)貙ζ溥M(jìn)行調(diào)整,不過還是要根據(jù)本地機(jī)器的內(nèi)存大小來設(shè)置。
此外,這兩個值還直接影響到永久代的大小,如果Java中引入了大量的第三方類庫,而jvm在編譯時需要將這些大量類庫加載到內(nèi)存中,需要加載到永久代中,這時可以適當(dāng)調(diào)大來增加永久帶的大小。
3)-XX:OnOutOfMemoryError參數(shù)詳解
OnOutOfMemoryError參數(shù)就是告訴我們當(dāng)我們的jvm發(fā)生內(nèi)存溢出或者是內(nèi)存泄漏時,我們可以設(shè)置一些指令來告訴我們的程序管理者。
該參數(shù)就可以完美的設(shè)置,比如說發(fā)郵件告訴我們做一些內(nèi)存清理和內(nèi)存設(shè)置的工作。

上圖中的例子就是設(shè)置了一下該參數(shù),然后將內(nèi)存溢出的詳細(xì)信息打包成一個文件運(yùn)行在jvm的腳本中。
到此這篇關(guān)于Java reservedcodecachesize虛擬機(jī)參數(shù)案例詳解的文章就介紹到這了,更多相關(guān)Java reservedcodecachesize虛擬機(jī)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決java main函數(shù)中的args數(shù)組傳值問題
這篇文章主要介紹了解決java main函數(shù)中的args數(shù)組傳值問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java response響應(yīng)體和文件下載實現(xiàn)原理
這篇文章主要介紹了Java response響應(yīng)體和文件下載實現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
一文帶你掌握J(rèn)ava開發(fā)者如何接入并使用DeepSeek
對于Java開發(fā)者來說,將DeepSeek集成到項目中,可以極大地提升數(shù)據(jù)處理和分析的效率,下面小編就來為大家介紹一下具體的調(diào)用方法吧2025-03-03
APT?注解處理器實現(xiàn)?Lombok?常用注解功能詳解
這篇文章主要為大家介紹了使用APT?注解處理器實現(xiàn)?Lombok?常用注解功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Java MultipartFile實現(xiàn)上傳文件/上傳圖片
這篇文章主要介紹了Java MultipartFile實現(xiàn)上傳文件/上傳圖片,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12

