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

标签 java object memory-leaks arraylist

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

相关文章:

java - 在 Java 中创建一个以数组作为参数的对象

java - JVM 会垃圾收集内存中的孤立周期吗?

java - 在 Java 应用程序中使用的 OpenCV JNI 库中的内存使用跟踪工具

javascript - ASP.NET Ajax Dispose模式等效于jQuery吗?

Java 对象数组(每个对象具有超过 1 个元素) 如何更改特定对象中的 1 个元素

java - 我想在Java中使用文字 "FILE"作为文件系统文件中包含的数据的存储点

java - 如何将字符串转换回字节以便用 Java 写入文件?

php - 我可以在php中自由设置成员吗?

java - java中如何从对象数组中删除一个对象

java - 在 Spring : Caused by: org. hibernate.AnnotationException 中使用 Hibernate 的困难:针对未映射的类使用 @OneToMany 或 @ManyToMany: