我有一个产生大量线程的循环。这些线程除其他外包含2个(大量)StringBuilder对象。然后这些线程运行并执行其操作。
但是,我注意到经过一定数量的线程处理后,出现了奇怪的崩溃。我知道这是因为有这些StringBuilder,因为当我减少它们的初始容量时,我可以启动更多的线程。现在,对于这些StringBuilder,它们是在线程对象的构造函数中创建的,如下所示:
StringBuilder a =新的StringBuilder(30000);
StringBuilder b =新的StringBuilder(30000);
它通常崩溃的点是大约550个线程,这导致略大于62MB。结合程序的其余部分,正在使用的内存很可能是64MB,我在网上某处读到的是JVM内存分配池的减少大小。我不知道这是不是真的。
现在,我在做错什么吗,由于设计原因,我以错误的方式分配了内存吗?还是这是唯一的方法,我应该告诉JVM增加其内存池吗?还是完全其他?
另外,请不要告诉我设置较低的容量,我知道这些StringBuilders会在需要时自动增加容量,但是我想解决这个问题。
最佳答案
使用-Xmx
JVM选项可以增加Java的最大堆大小。
Before J2SE 5.0, the default maximum heap size was 64MB. You can override this default using the -Xmx
command-line option.