我正在用 Java 开发类似扫雷的游戏,并且注意到每当我重置板时都会发生内存泄漏。我在下面做了一个测试,发现每当我在 ArrayList 的 add() 方法中创建一个新对象时,每当我使用 clear() 方法时,垃圾收集器都不会从内存中转储元素。这里有一些代码供引用:
import java.util.ArrayList;
import java.util.Scanner;
public class MemLeakTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<PointlessObject> list = new ArrayList();
String selection = "1";
while(selection.equals("1")){
System.out.print("Type 1 to run test:");
selection = input.next();
System.out.println();
//begin test
if(selection.equals("1")){
for(int i = 0; i<100000; i++){
list.add(new PointlessObject());
}
}
list.clear(); // ArrayList elements remained in memory
}
}
}
class PointlessObject{
String text;
public PointlessObject(){
text = "Stuff";
}
}
除了创建一长串对象之外,还有什么更好的替代方法可以最大限度地减少内存泄漏?
最佳答案
进行以下测试:删除该行
selection = input.next();
来自循环。这将使它成为一个无限循环。如果你有内存泄漏,你会很快得到一个 OutOfMemoryError,对吧?如果你没有得到一个,这意味着你没有任何内存泄漏。
您只是希望 GC 运行,但当您认为它运行时它并没有运行。它在必要时运行。
关于java - 在 ArrayList 的 add() 方法中创建新对象会导致内存泄漏。我能做些什么不同的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18398378/