我有一个小的Java应用程序,它基本上是一个命令行实用程序,它有99%的时间处于休眠状态,每天运行一次以在特定位置复制文件。该应用程序占用的内存为10 Mb。当然,这并不是一个很大的数目,但是看起来该应用程序占用了更多的内存。您能否建议如何减少该应用程序的内存量?
我这样运行:
java -Xmx12m -jar c:\copyFiles\copyFiles.jar
答案 0 :(得分:1)
AFAIK在很大程度上取决于所使用的垃圾收集器和jvm版本,但是由于许多原因,通常VM并不非常渴望将内存还给OS。更广泛的讨论是here about the same topic
自jdk-12起,就有这个JEP:
http://openjdk.java.net/jeps/346
将指示VM(带有某些标志)在“计划的”垃圾收集器周期发生后将内存还给OS-这是由一些新引入的标志控制的;阅读JEP以了解更多信息。
答案 1 :(得分:0)
由于您为JVM使用了-Xmx12m
参数,因此您允许应用程序使用大约12 MB。 Java在内存方面有点浪费。您可以减少应用程序可以使用的最大内存量:
-Xmx10k
-最多可以使用10 KB的内存。
-Xmx10m
-最多可以使用10 MB的内存。
-Xmx10g
-最多可以使用10 GB的内存。
请随意混合此设置,但要小心。如果超过设置的数量,则会抛出OutOfMemory-exception。
答案 2 :(得分:0)
请尝试使用jlink自定义jre来解决此问题。您可以找到一个很好的例子here