gpt4 book ai didi

以下代码中的java字符串泄漏内存?如何修复它

转载 作者:行者123 更新时间:2023-12-01 11:42:39 24 4
gpt4 key购买 nike

这是函数:

String gen() {
String raw_content = "";
String line;
for (int i=0; i<10000; i++) {
line = randString();
raw_content += line + "\n";
}
return raw_content;
}

当我在 main() 中调用 gen() 100 次时,我的程序将卡住。我怀疑这与Java String引起的内存泄漏有关。那么不再使用的内存会被JVM自动释放吗?如何解决这个问题?

谢谢!

最佳答案

长话短说,在 java(和其他 JVM 语言)中,您根本不必关心内存分配。你真的不应该担心它 - 在所有对它的引用都丢失之后的某个时间,它会被垃圾收集线程释放。请参阅:Garbage Collection in Java

你的问题与内存关系不大,更多的是你的函数确实是时间密集型的(正如 Hot Licks 在评论中所说)。 Java 中的字符串是不可变的,因此当您说 raw_content += line + "\n"; 时,您实际上是在创建一个 raw_content + line + "\n" 的新字符串> 并将 raw_content 设置为等于该值。如果 rand_string() 返回长结果,这将变成一个非常长的字符串。如果您确实想执行此功能,StringBuilder 是至少将其从 O(N^2) 减少到 O(N) 的方法。如果您只是在寻找内存练习,则无需实际进行任何更改 - 只需阅读上面的文章即可。

关于以下代码中的java字符串泄漏内存?如何修复它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com