java 產生一個Java的記憶體洩露
我有過一個面試,被問到如何產生一個Java記憶體洩露。不用說,我感到相當傻,甚至如何產生一個的線索都沒有。
那麼怎麼才能產生一個記憶體洩露呢?
解決方案
在純Java中,有一個很好的方式可以產生真正的記憶體洩露(通過執行程式碼使物件不可訪問但仍存在於記憶體中):
- 應用產生一個長時間執行的執行緒(或者使用一個執行緒池加速洩露)。
- 執行緒通過一個(可選的自定義)類載入器載入一個類。
- 該類分配大記憶體(例如,new byte[1000000]),賦值給一個強引用儲存在靜態欄位中,再將它自身的引用儲存到ThreadLocal中。分配額外的記憶體是可選的(洩露類例項就夠了),但是這樣將加速洩露工作。
- 執行緒清除所有自定義類的或者類載入器載入的引用。
- 重複上面步驟。
這樣是有效的,因為ThreadLocal持有物件的引用,物件持有類的引用,接著類持有類載入器的引用。反過來,類載入器持有所有已載入類的引用。這會使洩露變得更加嚴重,因為很多JVM實現的類和類載入都直接從持久帶(permgen)分配記憶體,因而不會被GC回收。
轉載自:產生一個Java的記憶體洩露
相關文章
- JAVA記憶體洩露的原因及解決Java記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- 記一次尷尬的Java應用記憶體洩露排查Java記憶體洩露
- 一個 Vue 頁面的記憶體洩露分析Vue記憶體洩露
- 一個Vue頁面的記憶體洩露分析Vue記憶體洩露
- Java記憶體洩漏Java記憶體
- SHBrowseForFolder 記憶體洩露記憶體洩露
- 一次 Java 記憶體洩漏的排查Java記憶體
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- Java面試題:細數ThreadLocal大坑,記憶體洩露本可避免Java面試題thread記憶體洩露
- Java記憶體溢位OutOfMemoryError的產生與排查Java記憶體溢位Error
- ArkTS 的記憶體快照與記憶體洩露除錯記憶體洩露除錯
- 生產環境Java應用服務記憶體洩漏分析與解決Java記憶體
- 記一次"記憶體洩露"排查過程記憶體洩露
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- Android 記憶體洩露詳解Android記憶體洩露
- 納尼,Java 存在記憶體洩洩洩洩洩洩漏嗎?Java記憶體
- Java棧溢位|記憶體洩漏|記憶體溢位Java記憶體溢位
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- android Handler導致的記憶體洩露Android記憶體洩露
- Java記憶體洩漏解決之道Java記憶體
- Java應用程式中的記憶體洩漏及記憶體管理Java記憶體
- 排查Java記憶體洩露實戰(內附各種排查工具介紹)Java記憶體洩露
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- 翻譯 | 理解Java中的記憶體洩漏Java記憶體
- nodejs爬蟲記憶體洩露排查NodeJS爬蟲記憶體洩露
- Pprof定位Go程式記憶體洩露Go記憶體洩露
- 一次Kafka記憶體洩露排查經過Kafka記憶體洩露
- 記一次 .NET 某工控軟體 記憶體洩露分析記憶體洩露
- 記一次 Java 應用記憶體洩漏的定位過程Java記憶體
- 簡單的記憶體“洩露”和“溢位”記憶體
- Python實現記憶體洩露排查的示例Python記憶體洩露
- win10驅動記憶體洩露如何解決_win10記憶體洩露處理方法Win10記憶體洩露
- 一次排查Java專案記憶體洩漏的過程Java記憶體
- netty 堆外記憶體洩露排查盛宴Netty記憶體洩露
- 乾貨分享:淺談記憶體洩露記憶體洩露