原创 JVM內存模型和性能調優:垃圾收集算法:垃圾收集器(一) - 第31篇

           如果說收集算法是內存回收的方法論,那麼垃圾收集器就是內存回收的具體實現。 垃圾收集器就是垃圾收集算法的具體實現。          雖然我們對各個收集器進行比較,但並非爲了挑選出一個最好的收集器。因爲直到現在爲止還

原创 JVM內存模型和性能調優:垃圾收集算法:如何判斷對象可以被回收(第一篇)- 第28篇

         堆中幾乎放着所有的對象實例,對堆垃圾回收前的第一步就是要判斷哪些對象已經死亡(即不能再被任何途徑使用的對象) 一、引用計數法          給對象中添加一個引用計數器,每當有一個地方引用它,計數器就加1;當引用失效,

原创 JVM內存模型和性能調優:JVM內存分配與回收:Minor GC後存活的對象Survivor區放不下- 第26篇

Minor GC後存活的對象Survivor區放不下,這種情況會把存活的對象部分挪到老年代,部分可能還會放在Survivor區。 (1)當我們的代碼中有allocation1和allocation2 byte[] allocation1

原创 JVM內存模型和性能調優:JVM內存分配與回收:長期存活的對象將進入老年代- 第24篇

一、長期存活的對象將進入老年代        既然虛擬機採用了分代收集的思想來管理內存,那麼內存回收時就必須能識別哪些對象應放在新生代,哪些對象應放在老年代中。爲了做到這一點,虛擬機給每個對象一個對象年齡(Age)計數器。 如果對象在 E

原创 JVM內存模型和性能調優:JVM內存分配與回收:老年代空間分配擔保機制- 第27篇

年輕代每次minor GC之前JVM都會計算下老年代剩餘可用空間 如果這個可用空間小於年輕代裏現有的所有對象大小之和( 包括垃圾對象 ) 就會看一下“-XX:-HandlePromotionFailure”( jdk1.8默認就設置了 )

原创 JVM內存模型和性能調優:JVM內存分配與回收:對象動態年齡判斷- 第25篇

一、對象動態年齡判斷 當前放對象的Survivor區域裏(其中一塊區域,放對象的那塊S區),一批對象的總大小大於這塊Survivor區域內存大小的50%(-XX:TargetSurvivorRatio可以指定),那麼此時大於等於這批對象年

原创 水滿自溢「限流算法第四把法器:漏桶算法」- 第303篇

相關歷史文章(閱讀本文之前,您可能需要先看下之前的系列👇) 國內最全的Spring Boot系列之三 版本號命名的前世今生- 值得收藏 - 第299篇 「世界上最好的學習法:費曼學習法」 高併發,不怕不怕「限流算法第一把法器:計數器法」

原创 JVM內存模型和性能調優:對象優先在Eden區分配- 第22篇

大多數情況下,對象在新生代中 Eden 區分配。當 Eden 區沒有足夠空間進行分配時,虛擬機將發起一次Minor GC。 我們來進行實際測試一下,在測試之前我們先來看看 Minor GC和Full GC 有什麼不同呢? Minor GC

原创 JVM內存模型和性能調優:大對象直接進入老年代- 第23篇

一、大對象直接進入老年代 1.1 定義 大對象就是需要大量連續內存空間的對象(比如:字符串、數組)。JVM參數 -XX:PretenureSizeThreshold 可以設置大對象的大小,如果對象超過設置大小會直接進入老年代,不會進入年輕

原创 JVM內存模型和性能調優:JVM內存參數設置- 第19篇

前言        在前面我們講了堆內存中牽涉的幾塊區域,那麼這幾塊區域是否可以設置大小吶?        答案肯定是可以的。   一、JVM內存參數設置   (1)Xss : 含義:設置線程棧大小,默認值爲1M; 輔助記憶:ss ->

原创 JVM內存模型和性能調優:Eden Survivor名稱由來- 第17篇

前言        這一節我們來講有趣的故事,有助於大家對於堆中的這些有一定的瞭解。   一、名詞 Eden: 含義:伊甸園(The garden of Eden) Survivor: 含義:倖存者 GC: 含義:Garbage Coll

原创 JVM內存模型和性能調優:JVM的新生代內存中,爲什麼除了Eden區,還要設置兩個Survivor區?- 第18篇

前言        Java爲什麼要設計Survivor,而且還要設計兩個吶?   一、爲什麼要有Survivor區 如果沒有Survivor,Eden區每進行一次Minor GC,存活的對象就會被送到老年代。老年代很快被填滿,觸發Maj

原创 JVM內存模型和性能調優:JVM的運行模式和逃逸分析- 第20篇

一、運行模式 JVM的運行模式有三種: (1)解釋模式(Interpreted Mode):使用解釋器(-Xint  強制JVM使用解釋模式),執行一行JVM字節碼就編譯一行爲機器碼(0101)。        特點:啓動快,執行整體慢。

原创 JVM內存模型和性能調優:JVM內存模型整體回顧- 第21篇

對於原先本章第一節的那張圖片,帶領和大家一起回顧下:   整體: (1)類加載子系統:就是上面我們講過的類加載器做的事情。 (2)字節碼執行引擎:顧名思義就是執行字節碼指令的。 (3)運行時數據區:Java虛擬機在執行Java程序過程中

原创 JVM內存模型和性能調優:棧大小分析- 第12篇

前言        前面我們對於棧有一個基本的認知了,棧核心的是有棧幀控制的,一個方法就會分配一個棧幀內存空間,這個棧空間,是否可以可以無限開闢棧幀內存空間,答案肯定是不可以的,想必大家都有碰到過棧內存溢出吧。 一、Xss(Stack S