2012-07-17 69 views
0

我有一个多线程程序,它处理大量的字符串操作,并且在几个小时的执行后,内存超出并导致“java.lang.OutOfMemoryError:Java heap space”问题。而且我已经将我的整个内存用于java程序,即16 GB。Java中的内存问题

为了测试我创建了下面的示例程序来理解问题,并且在重新初始化一个字符串生成器几千次后,它会消耗超过5-10MB的内存,但是任何人都可以请求帮助克服这个问题。

StringBuilder strObj = new StringBuilder(); 
for(int i=0; i<50000; i++) { 
    strObj = null; 
    strObj = new StringBuilder(); 
} 
+7

这段代码只会导致一个OOME,如果你运行GC。否则,所有旧的实例都会丢失,并且会被垃圾收集。换句话说,在正常使用情况下,这段代码不会导致任何内存问题。 – jtahlborn 2012-07-17 19:33:28

+1

获取一个分析器并使用它。 – bmargulies 2012-07-17 19:42:30

+0

要做多少个线程? – 2012-07-17 19:58:27

回答

1

它从什么意义上消耗5-10MB的内存?你在这里分配那么多。在它需要内存之前,Java不会打扰它的回收。这不能导致OutOfMemoryError,而不是这种类型的代码。

那么,为什么不实际显示导致OOME的那种代码呢?

0

感谢支持人员,实际上我的问题是通过调用System.gc()语句手动垃圾收集后解决的。

+0

正;没有你会注意到堆占用率逐渐向年轻一代的规模限制蔓延,然后突然下降到空,这个周期永远重复。 – 2012-07-18 13:43:40