gpt4 book ai didi

java - 在 ArrayList 的 add() 方法中创建新对象会导致内存泄漏。我能做些什么不同的事情?

转载 作者:行者123 更新时间:2023-11-29 10:15:47 25 4
gpt4 key购买 nike

我正在用 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/

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