参见英文答案 > 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