使用指定的内存量限制java程序

时间:2010-12-04 18:50:37

标签: java

如何从消耗大量内存中设置java程序? System.out.println会不断增加内存消耗吗?

我使用VisualVM进行分析,我不太了解如何修复代码的某些部分。

2 个答案:

答案 0 :(得分:5)

使用-Xmxn标记,例如java -Xmx100m foofoo限制为100MB。

  

-Xmxn

     

指定内存分配池的最大大小(以字节为单位)。这个   值必须是1024的倍数大于2MB。将字母k或K附加到   表示千字节,或m或M表示兆字节。默认值为   根据系统配置在运行时选择。有关更多信息,请参阅   HotSpot人体工程学

     

示例:

     

-Xmx83886080

     

-Xmx81920k

     

-Xmx80m

值得一读:http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html

不断使用System.out.println()不应该增加内存使用量。每个调用都独立于下一个调用,它们不会构建一个已用存储器的存储。

答案 1 :(得分:0)

消耗大量内存的方法是保留对象。也就是说,在你完成它们之后让它们保持活力。例如,具有无限大小的缓存可以做到这一点。

但即便如此,JVM仅限于分配给它的内存(例如命令行),它永远不会超越PermGenSize + HeapSize。如果达到该阈值,则java将以OutOfMemoryError停止。

根据探查器使用大量内存并不意味着您的程序实际上需要该内存量。也可能是垃圾收集器还没有运行,或者认为它不需要大量运行,因为还有足够的内存。