【发布时间】:2010-12-04 18:50:37
【问题描述】:
如何设置java程序消耗大量内存? System.out.println 是否不断增加内存消耗?
我使用 VisualVM 进行分析,我不太了解如何修复部分代码。
【问题讨论】:
标签: java
如何设置java程序消耗大量内存? System.out.println 是否不断增加内存消耗?
我使用 VisualVM 进行分析,我不太了解如何修复部分代码。
【问题讨论】:
标签: java
使用-Xmxn 标志,例如java -Xmx100m foo 将 foo 限制为 100MB。
-Xmxn
指定内存分配池的最大大小(以字节为单位)。这个 值必须是大于 2MB 的 1024 的倍数。将字母 k 或 K 附加到 表示千字节,或 m 或 M 表示兆字节。默认值为 根据系统配置在运行时选择。有关详细信息,请参阅 热点人体工程学
例子:
-Xmx83886080
-Xmx81920k
-Xmx80m
值得一读:http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html
不断使用System.out.println() 不应增加内存使用量。每个调用都独立于下一个调用,它们不会积累已用内存。
【讨论】:
消耗大量内存的方法是保留对象。也就是说,在你完成它们之后让它们保持活力。例如,无限大小的缓存可以做到这一点。
但即使这样,JVM 也仅限于分配给它的内存(例如在命令行上),它永远无法超过 PermGenSize + HeapSize。如果您达到该阈值,java 将停止并出现 OutOfMemoryError。
根据分析器使用大量内存并不意味着您的程序实际上需要该数量的内存。也可能是垃圾收集器还没有运行,或者因为还有足够的内存而决定它不需要那么积极地运行。
【讨论】: