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

使用指定的内存量限制java程序,java,Java,如何设置java程序以避免占用大量内存?System.out.println是否不断增加内存消耗 我使用VisualVM进行了评测,我不太了解如何修复部分代码。使用-Xmxn标志,例如java-Xmx100m foo将foo限制在100MB -Xmxn 指定内存分配池的最大大小(以字节为单位)。这 值必须是大于2MB的1024的倍数。将字母k或k附加到 表示千字节,或m或m表示兆字节。默认值为 根据系统配置在运行时选择。有关详细信息,请参阅 热点工效学 示例: -Xmx83886080 -Xmx

如何设置java程序以避免占用大量内存?System.out.println是否不断增加内存消耗

我使用VisualVM进行了评测,我不太了解如何修复部分代码。

使用-Xmxn标志,例如java-Xmx100m foo将foo限制在100MB

-Xmxn

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

示例:

-Xmx83886080

-Xmx81920k

-Xmx80m

值得一读:


持续使用System.out.println不应增加内存使用。每个调用都独立于下一个调用,它们不会存储已用内存。

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

但是,即使JVM仅限于在命令行上分配给它的内存,它也永远不能超过PermGenSize+HeapSize。如果达到该阈值,java将停止并出现OutOfMemoryError


根据分析器使用大量内存并不意味着您的程序实际上需要大量内存。也可能是垃圾收集器还没有运行,或者决定不需要那么激进地运行,因为还有足够的内存。

内存持续增长太多仍然很奇怪,MIDI GetReceiver似乎是问题的根源