内存不足:无法创建新的本机线程

时间:2012-10-08 22:25:14

标签: java multithreading operating-system

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

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

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

这是8GB RAM Windows 7机器

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

1 个答案:

答案 0 :(得分:0)

有三个主要原因。

  1. 内存泄漏
  2. 低效算法
  3. 堆大小太小
  4. 这些通常可以通过以下方式解决:

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