gpt4 book ai didi

java - java中的内存泄漏

转载 作者:行者123 更新时间:2023-12-02 04:35:43 25 4
gpt4 key购买 nike

http://www.ibm.com/developerworks/rational/library/05/0816_GuptaPalanki/#javaexample

作者在代码中表示存在内存泄漏。

public class LeakExample {
static Vector myVector = new Vector();
static HashSet pendingRequests = new HashSet();

public void slowlyLeakingVector(int iter, int count) {
for (int i=0; i<iter; i++) {
for (int n=0; n<count; n++) {
myVector.add(Integer.toString(n+i));
}
for (int n=count-1; n>0; n--) {
// Oops, it should be n>=0
myVector.removeElementAt(n);
}
}
}

为什么这段代码有内存泄漏,而下面的代码却没有。是什么让两者不同。

public void noLeak(int size) {
HashSet tmpStore = new HashSet();
for (int i=0; i<size; ++i) {
String leakingUnit = new String("Object: " + i);
tmpStore.add(leakingUnit);
}
// Though highest memory allocation happens in this
// function, but all these objects get garbage
// collected at the end of this method, so no leak.
}

最佳答案

在第一个示例中,并非 vector 的所有元素都被删除(如代码中的注释所示)。由于 myVector 是一个 static 成员变量,因此只要应用程序运行,它就会一直保留在那里,并且会随着每次调用而增长到slowlyLeakingVector()

在第二个例子中,tmpStore是一个局部变量,每次从noLeak()返回后都会被垃圾回收。

关于java - java中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966930/

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