【问题标题】:Out of memory: cannot create a new native thread内存不足:无法创建新的本机线程
【发布时间】:2012-09-29 05:04:30
【问题描述】:

我正在开发一个应用程序,其中客户端(用户)可以控制创建新线程并杀死它们。该应用程序基于 Java。

在其中一种情况下,用户创建多个线程并杀死它们并创建新线程并继续。一段时间后,OutofMemoryException 弹出。我认为这与线程堆栈问题有关。所以我将线程堆栈 XSS 从 1024KB 减少到 512KB,并将 Java 堆大小从 Xms 256mb XmX 1024mb 减少到 Xms 256mb Xmx 512mb。

我还使用 yourkit 对应用程序进行了内存分析,只是为了查看它是否从堆大小溢出。但它似乎没问题..线程被创建并杀死了。

这是 8GB RAM Windows 7 机器

我想知道,还有什么可能导致这个异常?

【问题讨论】:

  • 你是如何杀死那些线程的?你确定你是joining 他们吗?
  • 我敢打赌这是你代码中的一个错误,你应该发布一些;)
  • 没有代码很难回答。你如何杀死线程?安全的方法是从 public void run() 方法返回。
  • @Isaac 当可运行的线程完成执行时,线程停止(死)。是的,我们都加入了
  • 您是否考虑过使用线程池或执行器,以便在当前工作完成时可以重用线程?

标签: java multithreading operating-system


【解决方案1】:

这有 3 个主要原因。

  1. 内存泄漏
  2. 低效的算法
  3. 堆大小太小

这些通常可以通过以下方式解决:

  1. 内存泄漏 - 取消引用不需要的对象
  2. 低效算法 - 提供内存效率更高的算法(有时越少越好)
  3. 堆大小 - 增加堆大小

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2023-03-04
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多