java - 在 Java 8 中创建内存泄漏

标签 java memory-leaks java-8

同样的问题已再次得到回答( Creating a memory leak with Java ),但现在 Java 8 删除了永久代,我认为更新此主题会很有用,因为大多数答案都取决于耗尽永久代的可用空间.

那么,在 Java 8 中造成内存泄漏的最简单方法是什么?

最佳答案

我认为常见的内部类内存泄漏会起作用。例子取自网络:

public class LeakFactory
{//Just so that we have some data to leak
    int myID = 0;
// Necessary because our Leak class is non-static
    public Leak createLeak()
    {
        return new Leak();
    }

// Mass Manufactured Leak class
    public class Leak
    {//Again for a little data.
       int size = 1;
    }
}

public class SwissCheese
{//Can't have swiss cheese without some holes
    public Leak[] myHoles;

    public SwissCheese()
    {
    // let's get the holes and store them.
        myHoles = new Leak[1000];

        for (int i = 0; i++; i<1000)
        {//Store them in the class member
            myHoles[i] = new LeakFactory().createLeak();
        }

    // Yay! We're done! 

    // Buh-bye LeakFactory. I don't need you anymore...
    }
}

这里发生的是 createLeak() 工厂方法返回 Leak 类,理论上 LeakFactory 对象有资格被 GC 删除,因为我们不保留对它的引用。但是Leak类需要LeakFactory存在,因此LeakFactory永远不会被删除。无论您使用什么 Java 版本,这都会造成内存泄漏。

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

相关文章:

java - 在java方法中重新编译源代码?

c - 使用 valgrind 和 gdb 跟踪变量更改

ios - 在 iPad 上加载全屏 Retina 图像会导致 10 MB 的巨大峰值

json - 如何使用 Java 8 通过匹配 Map 中的键来从 JSON 对象中提取值?

java - 将 lambda 替换为 contains 的方法引用

java - FutureTask 如何管理线程..?

java - 由于@OneToMany,JPA 更新记录失败

java - ArrayIndexOutOfBoundsException 错误,但我认为代码没问题

hibernate - spring 3.1、hibernate 4、tiles2、tomcat 7 - 清理(多次部署导致内存泄漏)

java - Java lambda 可以有超过 1 个参数吗?