日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 架構(gòu)師社區(qū)
[導讀]垃圾回收器老哥:你這樣瘋狂的嚯嚯對象,有考慮過我的感受嗎?

“對象”的一生

像往常一樣,早上10點到了公司,趙小八打開電腦收到了PM前一天晚上發(fā)來的推薦系統(tǒng)新需求,內(nèi)心一萬只草泥馬飄過,思索了半天,打開IDEA開始了“愉快的”new對象之旅。

垃圾回收器老哥:你這樣瘋狂的嚯嚯對象,有考慮過我的感受嗎?

趙小八:你誰?。课襫ew對象干你啥事?

垃圾回收器老哥:年輕人火氣別這么大,既然你這么說那請耗子尾汁。

趙小八:呵,你哥我是被嚇大的

垃圾回收器老哥:年輕人不講武德...

沒兩天,小八翹著尾巴給PM說,功能上線了,剛沒一會兒PM罵罵咧咧的找來了,這tm為啥有時候能出來內(nèi)容有時候出不來啊,小八菊花一緊趕緊查起了問題,先摟監(jiān)控接口平均耗時從200ms漲到了300ms,小八心想,我不過就多new了幾個對象,怎么tm的影響會這么大,同時DBA同學反饋資源監(jiān)控正常,看來只能摟業(yè)務日志看看了,可是業(yè)務日志也并沒有什么問題,難道GC有問題?果不其然,GC日志像瘋了一樣的刷日志。小八趕緊讓運維緊急回滾線上代碼并dump了一份GC日志分析了起來。

現(xiàn)場代碼復原

一次線上故障之Java對象的生命歷程

上面這段代碼是一個簡化版的用戶推薦系統(tǒng),真實情況下加載需要加載的物料除機器學習物料、商業(yè)物料外,還有其他各種例如:運營物料、曝光物料、關系物料等等。

當一個真實用戶請求過來之后,上面提到的這些物料就需要全部被加載進來。對象首先從新生代中被創(chuàng)建出來,接著經(jīng)過一段時間GC后,最后存活下來的對象成功晉級到老年代,那么對象是在什么情況下成功晉級到老年代的呢?

case1:對象經(jīng)歷15次GC

  1. 小八瘋狂的new對象,此時新創(chuàng)建的都被分配到Eden區(qū),如下圖:

一次線上故障之Java對象的生命歷程

  1. 小八繼續(xù)瘋狂new對象,直到jvm老哥的Eden區(qū)放不下更多的對象了,于是觸發(fā)了一次youngGC,通過這次youngGC之后,只有Context1對象被回收,剩余存活對象進入到了Survivor1里面,如下圖:
一次線上故障之Java對象的生命歷程
  1. 第一次youngGC結(jié)束后,小八又開始了new對象的神操作
一次線上故障之Java對象的生命歷程
  1. 沒一會兒,jvm又開始了youngGC,此時Eden區(qū)和Survivor1里面的存活對象全部移入到Survivor2中,剩余垃圾對象被回收。

一次線上故障之Java對象的生命歷程

  1. 就這樣反反復復經(jīng)歷了15次youngGC的折騰,還沒有被垃圾回收掉的對象最終進入了Old區(qū)
一次線上故障之Java對象的生命歷程

case2:動態(tài)年齡判斷

  1. 小八瘋狂的new對象
一次線上故障之Java對象的生命歷程
  1. 小八繼續(xù)瘋狂new對象,直到jvm老哥的Enden區(qū)放不下更對的對象了,于是觸發(fā)了一次youngGC
一次線上故障之Java對象的生命歷程

經(jīng)過此次youngGC后,剩余存活對象內(nèi)存占用大小超過了survivor1區(qū)大小的50%,比如:survivor1區(qū)大小為50M,而進入到survivor1區(qū)的存活對象大小為30M,此時會將當前存活時間最久的對象直接晉升到老年代(存活時間:經(jīng)歷過GC次數(shù)最多的對象),此時Context2對象和Context3對象進入到老年代

一次線上故障之Java對象的生命歷程

case3:空間擔保機制

小八上線的用戶推薦系統(tǒng),JVM內(nèi)存的劃分情況為:整個堆大小為5G,其中老年代2.5G,新生代2.5G,其中新生代中Eden區(qū):Survivor區(qū)=8:2,即Eden區(qū)大小為2G,兩個Survivor區(qū)大小各為250M。

在晚高峰的時候一下子涌入1000人查看推薦列表,一個用戶消耗的JVM內(nèi)存達到了500kb,那么在一秒內(nèi)就消耗了500M,那么就意味著4秒鐘就會產(chǎn)生一次youngGC,假設每次GC后剩余的存活對象為300M,由于300M大小的存活對象無法在survivor區(qū)中存放下,此時就觸發(fā)了空間擔保機制。

  1. 小八瘋狂的new對象
一次線上故障之Java對象的生命歷程
  1. 直到發(fā)生第一次youngGC,但是一次youngGC后剩余的存活的對象大小Survivor區(qū)無法容納下,此時所有存活對象會直接進入到Old區(qū)
一次線上故障之Java對象的生命歷程

在新生代沒有足夠的內(nèi)存存儲新產(chǎn)生的對象時,老年代會判斷自己的區(qū)域剩余的內(nèi)存空間是否能夠放得下歷代youngGC后剩余存活對象(假設歷代youngGC剩余存活對象大小為300M),假設此時老年代還有1G大小的可用內(nèi)存,那么此次youngGC后剩余的存活對象將直接進入到老年代;假設此時老年代剩余可用內(nèi)存大小為200M,那么就會觸發(fā)一次OldGC,OldGC完成后產(chǎn)生的空閑空間大于300M,此時會將新生代的存活對象放入老年代,如果OldGC后剩余的空閑空間小于300M,那么不好意思,就會拋出OOM了。

一圖總結(jié)Java對象流轉(zhuǎn)情況

一次線上故障之Java對象的生命歷程

上圖便是整個Java對象一生經(jīng)歷的流程,流程圖相對比較復雜一點,從上往下對照前面講到的三種情況,相信還是比較容易理解的。

當然圖中沒有畫圖新生代觸發(fā)OOM的情況,可以試想一下Eden區(qū)在什么時候會觸發(fā)OOM?答案在下篇文章給出。

總結(jié)

通過一個實際線上案例,講述了Java對象在不同情況下在JVM中經(jīng)歷的一生。通過本文大家可以嘗試將該流程套用到自己公司的項目里面,來分析自己負責的項目是否有類似的問題,或者通過本篇文章來嘗試優(yōu)化自己的項目。另外本文的內(nèi)容可能會有某些地方講解的不合適,歡迎有問題的朋友和我私聊探討。

在上篇文章中留了一個問卷調(diào)查,結(jié)論如下:總投票人數(shù)7人,其中最想了解的技術是SpringCloud,最喜歡的分享方式是圖文結(jié)合。雖然投票人數(shù)比較少,但我相信投票的真實性,后續(xù)我會以這個結(jié)論為導向,分享更多實用的內(nèi)容給大家。

打個小廣告,年后大家有換個工作氛圍的朋友或者身邊有想法的朋友,快手研發(fā)、運維、產(chǎn)品、運營全部崗位都有你想要的坑位,各種新業(yè)務發(fā)展速度快,機會多多,面試流程反饋速度超快,歡迎朋友們自薦或者推薦朋友來一起做點有意義的事。




		
		
		
		

免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉