參見英文答案 > Java String.substring method potential memory leak? 3個
據說String類中的substring方法會導緻記憶體洩漏.這是真的嗎?怎麼樣?有什麼替代方案嗎?
特别是在尋找答案,在java中可能導緻記憶體洩漏的所有其他事情是什麼?這将有助于我在編碼時保持謹慎.
解決方法:
在以前版本的JDK中,substring方法的實作将建構一個新的String對象,保持對整個char數組的引用,以避免複制它.是以,您可能無意中僅使用一個字元串保留對非常大的字元數組的引用.這可能導緻Here’s an example的錯誤.
此方法現已更改,此“洩漏”不再存在.
如果你想使用一個舊的JDK(比OpenJDK 7更新,更新6)并且你希望在substring之後擁有最少的字元串,那麼使用構造函數取另一個字元串:
String s2 = new String(s1.substring(0,1));
關于你的第二個問題,關于“其他可能導緻java中記憶體洩漏的事情”,不可能以建設性的方式回答.在java标準庫中沒有很多執行個體可以很容易地保持對對象的隐藏引用.在一般情況下,請注意您建構的所有引用,可能是未清理的集合或外部資源(檔案,資料庫事務,本機視窗小部件等)中可能出現的最常見問題.
标簽:java,memory,memory-leaks
來源: https://codeday.me/bug/20190926/1818385.html