引起:java.lang.OutOfMemoryError:Java堆空间

Gan*_*mar 4 java multithreading operating-system threadpool

我的目标:

我想为1000个用户运行我的应用程序.

现在

我想为100个用户运行.在应用程序运行期间,我想为每个用户执行一些过程,每个用户至少需要一个小时,因此我每个用户使用一个线程.

错误

Caused by: java.lang.OutOfMemoryError: Java heap space

我试图找出这意味着什么,但我不确定如何解决它.

有谁能够帮我?

Jea*_*art 7

此错误意味着您的程序需要比JVM允许的内存更多的内存!

因此,您几乎有两个选择:

  1. 提高你的程序是允许使用使用默认的内存-Xmx选项(例如1024 MB: -Xmx1024m)
  2. 修改你的程序,使它需要更少的内存,使用更少的大数据结构,并删除程序中某些时候不再使用的对象

正如Peter Lawrey指出的那样,使用分析器来查看您的程序在这种情况下正在做什么通常是一个好主意.


Boh*_*ian 5

使用具有有限数量工作线程的生产者/消费者模式。

100 多个线程是荒谬的 - 难怪你的应用程序正在爆炸。

  • 我同意你的观点,但我必须指出,100+ 线程并不是那么荒谬,事实上,如果你使用 Spring 和 Hibernate 检查正在运行的 Tomcat/jetty 中的线程,你可能已经有大约 50-60 个与框架相关的线程线程。想想看,在tomcat池中默认配置的threadPool大小是200,这意味着100+线程绝对不是那么荒谬。话虽如此,除了使每个进程需要不到 1 小时并需要更少的堆或增加 maxHeapSize 本身之外,具有工作线程的生产者/消费者模式确实是正确的解决方案。 (2认同)