【问题标题】:Java - ThreadFactory memory leak?Java - ThreadFactory 内存泄漏?
【发布时间】:2014-06-23 18:52:50
【问题描述】:

这段代码:

    while (true) {
        new ThreadFactory() {
            @Override
            public Thread newThread(Runnable r) {
                return null;
            }
        };
    }

让 JVM 很快耗尽内存。

为什么?

【问题讨论】:

  • 你有一个创建对象的无限循环:你期望什么?
  • 我希望 GC 收集未使用的引用。
  • ThreadFactory无关。对于大多数其他类,您也会看到类似的效果。
  • @ben:GC 怎么知道它们没有被使用?你永远不会退出他们存在的范围。
  • @ben 我已经更新了我之前的答案,因为我认为它不正确。如果它仍然是热门话题,请查看它。

标签: multithreading memory-leaks


【解决方案1】:

我尝试在 Windows 7 上使用 JRE 1.7.0_60 x86_64 使用默认选项运行此代码,结果如下:

  1. 按原样运行的作者代码似乎根本没有执行任何分配,很可能是因为 JIT 检测到未使用的引用;
  2. 将创建的threadFactorys 输出到System.out 的代码的修改版本导致“锯齿状”堆使用模式:

这意味着分配和垃圾收集都发生了。

回到你的问题:我认为你错过了代码的一些重要部分,或者将 -Xmx 设置为极低的值,或者其他一些原因。不过,您发布的代码还可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2015-08-14
    • 2012-08-11
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多