天天看點

java string 記憶體洩漏_java – String類中的substring方法導緻記憶體洩漏

參見英文答案 > 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