java 產生一個Java的記憶體洩露
我有過一個面試,被問到如何產生一個Java記憶體洩露。不用說,我感到相當傻,甚至如何產生一個的線索都沒有。
那麼怎麼才能產生一個記憶體洩露呢?
解決方案
在純Java中,有一個很好的方式可以產生真正的記憶體洩露(通過執行程式碼使物件不可訪問但仍存在於記憶體中):
- 應用產生一個長時間執行的執行緒(或者使用一個執行緒池加速洩露)。
- 執行緒通過一個(可選的自定義)類載入器載入一個類。
- 該類分配大記憶體(例如,new byte[1000000]),賦值給一個強引用儲存在靜態欄位中,再將它自身的引用儲存到ThreadLocal中。分配額外的記憶體是可選的(洩露類例項就夠了),但是這樣將加速洩露工作。
- 執行緒清除所有自定義類的或者類載入器載入的引用。
- 重複上面步驟。
這樣是有效的,因為ThreadLocal持有物件的引用,物件持有類的引用,接著類持有類載入器的引用。反過來,類載入器持有所有已載入類的引用。這會使洩露變得更加嚴重,因為很多JVM實現的類和類載入都直接從持久帶(permgen)分配記憶體,因而不會被GC回收。
轉載自:產生一個Java的記憶體洩露
相關文章
- Java記憶體洩露的原因Java記憶體洩露
- JAVA 記憶體洩露的理解Java記憶體洩露
- 學習Java:記憶體洩露Java記憶體洩露
- JAVA記憶體洩露的原因及解決Java記憶體洩露
- 如何診斷 Java 中的記憶體洩露Java記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- 記一次尷尬的Java應用記憶體洩露排查Java記憶體洩露
- Java 中 ThreadLocal 記憶體洩露的例項分析Javathread記憶體洩露
- Java 記憶體洩露的理解與解決過程Java記憶體洩露
- 記憶體洩露記憶體洩露
- 一個 Vue 頁面的記憶體洩露分析Vue記憶體洩露
- 一個Vue頁面的記憶體洩露分析Vue記憶體洩露
- Java字串的substring真的會引起記憶體洩露麼?Java字串記憶體洩露
- java: web應用中不經意的記憶體洩露JavaWeb記憶體洩露
- Java記憶體洩漏Java記憶體
- JAVA 記憶體洩露詳解(原因、例子及解決)Java記憶體洩露
- js記憶體洩露JS記憶體洩露
- JavaScript記憶體洩露JavaScript記憶體洩露
- 記憶體洩露嗎記憶體洩露
- SHBrowseForFolder 記憶體洩露記憶體洩露
- 【轉】Java的記憶體洩漏Java記憶體
- js記憶體洩露的原因JS記憶體洩露
- IE中的記憶體洩露記憶體洩露
- 記一次Go websocket 專案記憶體洩露排查 + 使用Go pprof定位記憶體洩露GoWeb記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 一次 Java 記憶體洩漏的排查Java記憶體
- 如何用Java編寫一段程式碼引發記憶體洩露Java記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- Java記憶體溢位OutOfMemoryError的產生與排查Java記憶體溢位Error
- 生產環境Java應用服務記憶體洩漏分析與解決Java記憶體
- Java面試題:細數ThreadLocal大坑,記憶體洩露本可避免Java面試題thread記憶體洩露
- 記憶體洩露引起的問題記憶體洩露
- JavaScript中的記憶體洩露模式JavaScript記憶體洩露模式
- ThreaLocal記憶體洩露的問題記憶體洩露
- 一種不易察覺的記憶體洩露 (轉)記憶體洩露
- 納尼,Java 存在記憶體洩洩洩洩洩洩漏嗎?Java記憶體
- 記一次"記憶體洩露"排查過程記憶體洩露
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露