如何从消耗大量内存中设置java程序? System.out.println会不断增加内存消耗吗?
我使用VisualVM进行分析,我不太了解如何修复代码的某些部分。
答案 0 :(得分:5)
使用-Xmxn
标记,例如java -Xmx100m foo
将foo
限制为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停止。
根据探查器使用大量内存并不意味着您的程序实际上需要该内存量。也可能是垃圾收集器还没有运行,或者认为它不需要大量运行,因为还有足够的内存。