我正在编写一个具有 ~30 类的 Java/Swing 应用程序,我的问题是当我运行我的程序时,它会加载超过150 M的内存,这正常吗?由于应用程序有 4 个线程,解析一些 XML 文件,加载一些图标文件,并绘制一些 Jfreechat 图表。如果不是,我该怎么做才能最大程度地减少应用程序使用的内存量,是否会影响某些变量为空帮助?是加载一次 XML 文件以在所有应用程序生命周期帮助中使用它们,还是每次需要它们时都必须加载它们?还有其他一些对我有帮助的提示吗?
PS:我使用 8G 内存计算机进行开发,以防影响我的程序使用的内存。
编辑:似乎该程序没有占用所有 150MB,因为我通过在我的应用程序中运行此代码从 linux 上的 top 命令获取此值,正如vilmantas建议我的那样:
long free = Runtime.getRuntime().freeMemory();
long total = Runtime.getRuntime().totalMemory();
long max = Runtime.getRuntime().maxMemory();
long used = total - free;
我发现他占用的内存要少得多(~40MB),所以我决定使用“-Xmx40M”参数运行它,并且在 Top 命令中减少了 40% 以上的内存使用量。自从JVM (据我所知)有自己的进程以来,谁占用了其余内存的问题?以及如何使此操作自动**?**,因为在选择不合适的值时,您可以像我一起使用“ -XMX30M”参数来获得内存异常:
Exception in thread "Thread-2" java.lang.OutOfMemoryError: Java heap space