我有一个使用以下jvm选项的应用程序:
-Xmx512m -Xms256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:MaxGCPauseMillis=2 -XX:MaxDirectMemorySize=1G
我在带有8GB RAM的Windows 7 x64上运行它。当任务经理说有60%的RAM正在使用时,就无法运行我的程序,Java说"内存不足"。即使理论上我还剩下近3GB的可用内存。下面是在NetBeans中分析我的项目的截图(直到它突然在随机点上崩溃)。什么可能导致这些问题?我的程序真的太贵了吗?
答案 0 :(得分:0)
你应该贪婪 - 分配你所需的最低开销。那是, 使用类似-Xms1g -XMx1g的东西,所以当你的应用程序实际开始运行时, 它已经保留了它的最大堆使用率。