国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JVM實(shí)戰(zhàn)(23)——內(nèi)存碎片優(yōu)化

這篇具有很好參考價(jià)值的文章主要介紹了JVM實(shí)戰(zhàn)(23)——內(nèi)存碎片優(yōu)化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

作者簡(jiǎn)介:大家好,我是smart哥,前中興通訊、美團(tuán)架構(gòu)師,現(xiàn)某互聯(lián)網(wǎng)公司CTO

聯(lián)系qq:184480602,加我進(jìn)群,大家一起學(xué)習(xí),一起進(jìn)步,一起對(duì)抗互聯(lián)網(wǎng)寒冬

學(xué)習(xí)必須往深處挖,挖的越深,基礎(chǔ)越扎實(shí)!

階段1、深入多線程

階段2、深入多線程設(shè)計(jì)模式

階段3、深入juc源碼解析

階段4、深入jdk其余源碼解析

階段5、深入jvm源碼解析

一、案例背景

本案例的背景是一個(gè)高峰期每秒十萬(wàn)QPS的社交APP,這類APP流量最大的模塊就是個(gè)人主頁(yè)模塊,會(huì)有大量的用戶在一個(gè)集中的時(shí)間段內(nèi)(比如晚上)頻繁訪問(wèn)各種個(gè)人主頁(yè)數(shù)據(jù),而且個(gè)人主頁(yè)的數(shù)據(jù)量通常比較大,在幾MB左右:

JVM實(shí)戰(zhàn)(23)——內(nèi)存碎片優(yōu)化,jvm專題,jvm

1.1 存在問(wèn)題

上述案例,由于高峰期的每秒并發(fā)量太高,所以新生代的Eden區(qū)會(huì)被迅速占滿,頻發(fā)觸發(fā)Young GC。而在Young GC的時(shí)候,下一秒的請(qǐng)求又來(lái)了,導(dǎo)致很多請(qǐng)求是還沒(méi)來(lái)得及處理完的,導(dǎo)致每次Young GC的時(shí)候很多對(duì)象需要存活下來(lái),因此在高峰期經(jīng)常會(huì)出現(xiàn)存活對(duì)象太多,導(dǎo)致Survivor區(qū)放不下的問(wèn)題:

JVM實(shí)戰(zhàn)(23)——內(nèi)存碎片優(yōu)化,jvm專題,jvm

所以,此時(shí)就會(huì)有大量對(duì)象頻繁進(jìn)入老年代,從而頻繁觸發(fā)老年代的GC:

JVM實(shí)戰(zhàn)(23)——內(nèi)存碎片優(yōu)化,jvm專題,jvm

二、內(nèi)存碎片

2.1 優(yōu)化前

我們先來(lái)看下系統(tǒng)優(yōu)化前的一些關(guān)鍵JVM參數(shù):
-XX:UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5

上述采用CMS對(duì)老年代進(jìn)行垃圾回收,默認(rèn)為標(biāo)記-清除算法,所以每次GC后都會(huì)出現(xiàn)許多內(nèi)存碎片。
我們來(lái)看下整個(gè)流程,首先老年代中有許多垃圾對(duì)象:

JVM實(shí)戰(zhàn)(23)——內(nèi)存碎片優(yōu)化,jvm專題,jvm

CMS回收掉一些垃圾對(duì)象后,就會(huì)出現(xiàn)內(nèi)存碎片,由于-XX:CMSFullGCsBeforeCompaction=5,所以5次Full GC之后才會(huì)進(jìn)行內(nèi)存碎片整理:

JVM實(shí)戰(zhàn)(23)——內(nèi)存碎片優(yōu)化,jvm專題,jvm

但是,大家考慮一個(gè)場(chǎng)景,一次Full GC之后,老年代中有一部分內(nèi)存里都是大量的內(nèi)存碎片,只有部分可用的連續(xù)空間。這時(shí)候,隨著大量對(duì)象進(jìn)入老年代,一旦連續(xù)可用空間不足以容納這些對(duì)象,就會(huì)導(dǎo)致立馬觸發(fā)下一次Full GC。

這樣,隨著一次次Full GC,導(dǎo)致老年代產(chǎn)生更多的內(nèi)存碎片,觸發(fā)下一次Full GC的速度也會(huì)越來(lái)越快,直到5次Full GC之后才會(huì)去整理內(nèi)存碎片。

2.2 優(yōu)化后

這個(gè)案例的優(yōu)化,其實(shí)非常簡(jiǎn)單。首先,可以用jstat分析下JVM的運(yùn)行情況,判斷出每次Young GC后存活對(duì)象的大小,然后增加Survivor區(qū)的大小,避免存活對(duì)象頻繁進(jìn)入老年代。

另外,優(yōu)化后部分對(duì)象還是慢慢會(huì)進(jìn)入老年代,畢竟系統(tǒng)的負(fù)載很高,所以調(diào)優(yōu)后每小時(shí)還是會(huì)有一次Full GC。

所以,第二個(gè)優(yōu)化點(diǎn)就是?針對(duì)CMS內(nèi)存碎片問(wèn)題進(jìn)行優(yōu)化?。在降低了Full GC的頻率后,務(wù)必設(shè)置以下參數(shù),使得每次Full GC后都進(jìn)行內(nèi)存碎片整理:
-XX:UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0

這樣雖然每次Full GC的內(nèi)存碎片整理需要消耗更多的時(shí)間,但是跟頻繁Full GC的時(shí)間消耗相比,效率會(huì)提升很多。

三、總結(jié)

本章,我們通過(guò)示例分析了頻繁Full GC導(dǎo)致的內(nèi)存碎片問(wèn)題,通過(guò)參數(shù)-XX:CMSFullGCsBeforeCompaction可以配置內(nèi)存碎片整理的次數(shù),從而提升系統(tǒng)的運(yùn)行效率。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-801278.html

到了這里,關(guān)于JVM實(shí)戰(zhàn)(23)——內(nèi)存碎片優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JVM實(shí)戰(zhàn)(30)——模擬堆內(nèi)存溢出

    JVM實(shí)戰(zhàn)(30)——模擬堆內(nèi)存溢出

    作者簡(jiǎn)介:大家好,我是smart哥,前中興通訊、美團(tuán)架構(gòu)師,現(xiàn)某互聯(lián)網(wǎng)公司CTO 聯(lián)系qq:184480602,加我進(jìn)群,大家一起學(xué)習(xí),一起進(jìn)步,一起對(duì)抗互聯(lián)網(wǎng)寒冬 學(xué)習(xí)必須往深處挖,挖的越深,基礎(chǔ)越扎實(shí)! 階段1、深入多線程 階段2、深入多線程設(shè)計(jì)模式 階段3、深入juc源碼解析

    2024年01月25日
    瀏覽(20)
  • JVM實(shí)戰(zhàn)(31)——內(nèi)存溢出之請(qǐng)求超時(shí)

    JVM實(shí)戰(zhàn)(31)——內(nèi)存溢出之請(qǐng)求超時(shí)

    本章,我們將通過(guò)實(shí)際案例講解一個(gè)Web應(yīng)用的內(nèi)存溢出問(wèn)題,該內(nèi)存溢出問(wèn)題的排查涉及Tomcat的一些底層原理,最終排查發(fā)現(xiàn)是由于請(qǐng)求超時(shí)問(wèn)題導(dǎo)致,我們先來(lái)看下系統(tǒng)的背景。 1.1 系統(tǒng)背景 生產(chǎn)環(huán)境的一個(gè)系統(tǒng)發(fā)生告警,拿到生產(chǎn)日志后出現(xiàn)如下字樣: Exception in thread

    2024年01月25日
    瀏覽(25)
  • JVM實(shí)戰(zhàn)(28)——模擬Metaspace內(nèi)存溢出

    JVM實(shí)戰(zhàn)(28)——模擬Metaspace內(nèi)存溢出

    作者簡(jiǎn)介:大家好,我是smart哥,前中興通訊、美團(tuán)架構(gòu)師,現(xiàn)某互聯(lián)網(wǎng)公司CTO 聯(lián)系qq:184480602,加我進(jìn)群,大家一起學(xué)習(xí),一起進(jìn)步,一起對(duì)抗互聯(lián)網(wǎng)寒冬 學(xué)習(xí)必須往深處挖,挖的越深,基礎(chǔ)越扎實(shí)! 階段1、深入多線程 階段2、深入多線程設(shè)計(jì)模式 階段3、深入juc源碼解析

    2024年01月18日
    瀏覽(23)
  • JVM工作原理與實(shí)戰(zhàn)(二十一):內(nèi)存管理

    JVM工作原理與實(shí)戰(zhàn)(二十一):內(nèi)存管理

    JVM工作原理與實(shí)戰(zhàn) RabbitMQ入門(mén)指南 從零開(kāi)始了解大數(shù)據(jù) 目錄 專欄導(dǎo)航 前言 一、不同語(yǔ)言的內(nèi)存管理 1.C/C++的內(nèi)存管理 2.Java的內(nèi)存管理 二、垃圾回收的對(duì)比 1.自動(dòng)垃圾回收與手動(dòng)垃圾回收的對(duì)比 2.優(yōu)點(diǎn)與缺點(diǎn) 總結(jié) JVM作為Java程序的運(yùn)行環(huán)境,其負(fù)責(zé)解釋和執(zhí)行字節(jié)碼,管理

    2024年01月21日
    瀏覽(20)
  • JVM實(shí)戰(zhàn)(24)——大對(duì)象優(yōu)化

    JVM實(shí)戰(zhàn)(24)——大對(duì)象優(yōu)化

    作者簡(jiǎn)介:大家好,我是smart哥,前中興通訊、美團(tuán)架構(gòu)師,現(xiàn)某互聯(lián)網(wǎng)公司CTO 聯(lián)系qq:184480602,加我進(jìn)群,大家一起學(xué)習(xí),一起進(jìn)步,一起對(duì)抗互聯(lián)網(wǎng)寒冬 學(xué)習(xí)必須往深處挖,挖的越深,基礎(chǔ)越扎實(shí)! 階段1、深入多線程 階段2、深入多線程設(shè)計(jì)模式 階段3、深入juc源碼解析

    2024年01月17日
    瀏覽(16)
  • JVM逃逸分析原理解析:優(yōu)化Java程序性能和內(nèi)存利用效率

    在Java開(kāi)發(fā)中,性能和內(nèi)存利用效率一直是開(kāi)發(fā)者關(guān)注的焦點(diǎn)。為了提高Java程序的執(zhí)行效率,JVM引入了逃逸分析技術(shù)。本文將詳細(xì)解析JVM逃逸分析的原理,幫助讀者深入理解其工作機(jī)制。 逃逸分析是一種用于確定對(duì)象在方法的生命周期內(nèi)是否逃逸出方法外部范圍的技術(shù)。在

    2024年01月20日
    瀏覽(87)
  • JVM實(shí)戰(zhàn)(25)——元數(shù)據(jù)區(qū)優(yōu)化

    JVM實(shí)戰(zhàn)(25)——元數(shù)據(jù)區(qū)優(yōu)化

    作者簡(jiǎn)介:大家好,我是smart哥,前中興通訊、美團(tuán)架構(gòu)師,現(xiàn)某互聯(lián)網(wǎng)公司CTO 聯(lián)系qq:184480602,加我進(jìn)群,大家一起學(xué)習(xí),一起進(jìn)步,一起對(duì)抗互聯(lián)網(wǎng)寒冬 學(xué)習(xí)必須往深處挖,挖的越深,基礎(chǔ)越扎實(shí)! 階段1、深入多線程 階段2、深入多線程設(shè)計(jì)模式 階段3、深入juc源碼解析

    2024年01月22日
    瀏覽(27)
  • JVM零基礎(chǔ)到高級(jí)實(shí)戰(zhàn)之Java內(nèi)存區(qū)域本地方法棧

    JVM零基礎(chǔ)到高級(jí)實(shí)戰(zhàn)之Java內(nèi)存區(qū)域本地方法棧 JVM零基礎(chǔ)到高級(jí)實(shí)戰(zhàn)之Java內(nèi)存區(qū)域本地方法棧 本地方法棧是什么? 用于作用域本地方法執(zhí)行的一塊Java內(nèi)存區(qū)域 為什么要有本地方法棧? 與Java虛擬機(jī)棧相同,每個(gè)方法在執(zhí)行的同時(shí)都會(huì)創(chuàng)建一個(gè)棧幀(Stack Framel)用于存儲(chǔ)局部

    2024年02月09日
    瀏覽(14)
  • 深度剖析JVM調(diào)優(yōu)法則,神器Arthas從CPU/內(nèi)存出發(fā)輕松掌握調(diào)優(yōu)實(shí)戰(zhàn)技巧

    深度剖析JVM調(diào)優(yōu)法則,神器Arthas從CPU/內(nèi)存出發(fā)輕松掌握調(diào)優(yōu)實(shí)戰(zhàn)技巧

    場(chǎng)景一、CPU過(guò)高 CPU占用過(guò)高排查思路: step1:進(jìn)行arthas step2:輸入deashboard 如何不記得命令可以在控制臺(tái)輸入help step3:查看線程棧信息 從線程棧信息中定位到具體的java代碼。 場(chǎng)景二、內(nèi)存占用過(guò)高 內(nèi)存占用過(guò)高排查思路: step1:進(jìn)行arthas step2:輸入deashboard 在dashboard頁(yè)面中

    2024年02月06日
    瀏覽(39)
  • 【JVM故障問(wèn)題排查心得】「Java技術(shù)體系方向」Java虛擬機(jī)內(nèi)存優(yōu)化之虛擬機(jī)參數(shù)調(diào)優(yōu)原理介紹

    【JVM故障問(wèn)題排查心得】「Java技術(shù)體系方向」Java虛擬機(jī)內(nèi)存優(yōu)化之虛擬機(jī)參數(shù)調(diào)優(yōu)原理介紹

    本文主要針對(duì)于綜合層面上進(jìn)行分析JVM優(yōu)化方案總結(jié)和列舉調(diào)優(yōu)參數(shù)計(jì)劃。主要包含: 調(diào)優(yōu)之逃逸分析(棧上分配) 調(diào)優(yōu)之線程局部緩存(TLAB) 調(diào)優(yōu)之G1回收器 -XX:+DoEscapeAnalysis 逃逸分析(Escape Analysis) 逃逸分析的基本行為就是分析對(duì)象動(dòng)態(tài)作用域:當(dāng)一個(gè)對(duì)象在方法中被定

    2024年01月25日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包