第 6章 openJ9的性能:減低空閑時(shí)的內(nèi)存消耗

? ? ?在這個(gè)云計(jì)算時(shí)代,云服務(wù)提供商使用不同的定價(jià)模式。?基于消耗的定價(jià)模型會(huì)對(duì)資源使用情況收取費(fèi)用,這通常包括內(nèi)存量,CPU周期,磁盤(pán)空間,網(wǎng)絡(luò)流量等。 如果能在程序運(yùn)行的空閑時(shí),能降低資源的消耗,就能降低成本的支出。

? ? ?而JVM在運(yùn)行時(shí),會(huì)自己申請(qǐng)一塊內(nèi)存區(qū)域,這塊區(qū)域被稱作是堆,由JVM自身來(lái)管理,當(dāng)應(yīng)用程序運(yùn)行一段時(shí)間后,Java堆將被垃圾對(duì)象所填充, 然后被回收,而當(dāng)應(yīng)用程序變?yōu)榭臻e狀態(tài)時(shí),由于沒(méi)有空間請(qǐng)求,JVM不會(huì)費(fèi)心收集垃圾。?所以,應(yīng)用程序最終會(huì)產(chǎn)生一個(gè)龐大的堆,即使在閑置期間也會(huì)保持內(nèi)存占用率過(guò)高,導(dǎo)致不必要的成本支出。

? ? ?為了解決這樣的問(wèn)題,在openJ9中有一個(gè)-XX:+ IdleTuningGcOnIdle選項(xiàng)來(lái)啟用空閑調(diào)整功能,其內(nèi)部計(jì)數(shù)器來(lái)判斷應(yīng)用程序是否進(jìn)入空閑周期時(shí),當(dāng)識(shí)別為進(jìn)入了空閑周期,就會(huì)將占用的內(nèi)存釋放會(huì)操作系統(tǒng)。

? 從上圖中可以看到 ,Java堆的內(nèi)存量在空閑期間不會(huì)下降,這不是錯(cuò)誤,因?yàn)镺penJ9不會(huì)調(diào)整堆大小,它只會(huì)解除堆頁(yè)并將內(nèi)存返回給操作系統(tǒng)。?因此,JVM報(bào)告的堆用量不會(huì)改變,改變的只是進(jìn)程的內(nèi)存占用

使用這個(gè)參數(shù)時(shí),需要注意一下幾點(diǎn):

1) -XX:+ IdleTuningGcOnIdle只能在Linux x86-64位平臺(tái)上使用

2)只用配合gencon?GC策略使用,這是默認(rèn)的GC策略。

3)應(yīng)用程序必須閑置一段時(shí)候后,才能觸發(fā)進(jìn)程內(nèi)存的回收,這個(gè)時(shí)間可以通過(guò)-XX:IdleTuningMinIdleWaitTime來(lái)調(diào)整

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容