《Java效能優化權威指南》的邊邊角(3)——生存代和記憶體洩漏
本文摘自《Java效能優化權威指南》第5章“Java應用效能分析”,這一章介紹了Java應用效能分析的基本概念。本文節選的是正文裡穿插的一個小TIP。
為了理解記憶體分析結果檢視中代的這一列的含義,你必須瞭解Java虛擬機器的垃圾收集過程。每次垃圾收集器執行時,一個物件或者是存活下來,繼續佔用堆記憶體,或者是被移除,其記憶體也被釋放。如果存活下來,則它的年齡會加1。換句話說,可以把物件的年齡簡單理解為它經歷過的垃圾收集次數。
代的個數是不同的物件年齡數。例如,應用程式第一次啟動時為幾個物件分配了空間。應用程式執行過程中,又分配了另外一組物件。最後有一些物件被分配,並只經歷了一次垃圾收集。如果整個執行過程中,垃圾收集器執行了80次,第一組的所有物件的年齡為80,第二組中所有物件的年齡為40,第三組中所有物件的年齡為1,那麼,代的個數的值就為3,因為堆上所有物件只有三個不同的年齡,分別是:80、40以及1。
在大多數Java應用程式中,代的個數最終會穩定下來。這是因為應用程式的持久物件已經分配完成。由於生命週期較短的物件很快會被垃圾收集所以不會對代的個數產生影響。
如果應用程式中代的個數隨著程式執行持續增長,那很可能是發生了記憶體洩漏。換句話說,應用程式隨著時間推進不斷地分配物件,每一個物件都有不同的年齡,因為它們所經歷的垃圾收集週期數不一樣。如果物件被正確回收,不同物件年齡的數目不會持續增長。
相關文章
- 《Java效能優化權威指南》的邊邊角(2)——理解JVM-系統鎖Java優化JVM
- 《Java效能優化權威指南》的邊邊角(5)——被我們搬運的豆瓣讀書筆記Java優化筆記
- 《Java效能優化權威指南》的邊邊角(1)——如果你發現日誌中只有Full GCJava優化GC
- 效能優化——記憶體洩漏(3)程式碼分析篇優化記憶體
- Android效能優化篇之記憶體優化--記憶體洩漏Android優化記憶體
- Android效能優化之記憶體洩漏Android優化記憶體
- 效能優化——記憶體洩漏(1)入門篇優化記憶體
- 記憶體洩漏與排查流程——安卓效能優化記憶體安卓優化
- 效能優化——記憶體洩漏(2)工具分析篇優化記憶體
- Android 效能優化之記憶體洩漏檢測以及記憶體優化(上)Android優化記憶體
- Android 效能優化之記憶體洩漏檢測以及記憶體優化(下)Android優化記憶體
- Android 效能優化之記憶體洩漏檢測以及記憶體優化(中)Android優化記憶體
- Android效能優化之常見的記憶體洩漏Android優化記憶體
- 1.記憶體優化(一)記憶體洩漏記憶體優化
- Java記憶體洩漏Java記憶體
- Java記憶體洩漏、效能優化、當機死鎖的N種姿勢Java記憶體優化
- Android 效能優化之被忽視的記憶體洩漏Android優化記憶體
- iOS效能優化 - 工具Instruments之Leaks記憶體洩漏iOS優化記憶體
- Android 效能優化 - 徹底解決記憶體洩漏Android優化記憶體
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- Android記憶體優化(三)避免可控的記憶體洩漏Android記憶體優化
- 【轉】Java的記憶體洩漏Java記憶體
- 三、Android效能優化之常見的記憶體洩漏分析Android優化記憶體
- 【轉】java中的記憶體溢位和記憶體洩漏Java記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- 記憶體洩漏和記憶體溢位記憶體溢位
- Android記憶體洩漏監控和優化技巧總結Android記憶體優化
- 記憶體洩漏記憶體
- Swift的ARC和記憶體洩漏Swift記憶體
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- [原創]Java效能優化權威指南讀書思維導圖3Java優化
- 納尼,Java 存在記憶體洩洩洩洩洩洩漏嗎?Java記憶體
- 小編薦書——Java效能問題的免疫魔法《Java效能優化權威指南》Java優化
- 介紹Java中的記憶體洩漏Java記憶體
- 關於java中的記憶體洩漏Java記憶體
- Java記憶體洩漏解決之道Java記憶體
- 【Java面試題】之記憶體洩漏Java面試題記憶體