64位jvm上的Java内存不足

64位jvm上的Java内存不足,java,memory,jvm,out-of-memory,Java,Memory,Jvm,Out Of Memory,我有个问题。我的程序非常大,java抛出了OfMemoryException。 在.bat文件中,我得到了以下信息: java -server -Dfile.encoding=UTF-8 -Xmx1500m -Xbootclasspath/p:../libs/l2ft.jar -cp config/xml;../libs/*; l2ft.gameserver.GameServer Java正在使用我的6GB内存,下一个6GB内存没有使用 我输入了System.getProperty(“sun.

我有个问题。我的程序非常大,java抛出了OfMemoryException。 在
.bat
文件中,我得到了以下信息:

java -server -Dfile.encoding=UTF-8 -Xmx1500m -Xbootclasspath/p:../libs/l2ft.jar -cp config/xml;../libs/*; l2ft.gameserver.GameServer
Java正在使用我的6GB内存,下一个6GB内存没有使用


我输入了
System.getProperty(“sun.arch.data.model”)上面说我使用的是64位JVM。

您已将最大堆大小设置为1500m,虽然JVM可以使用略多于该大小的200 MB,但这就是您限制进程的全部内容

尝试将进度限制在5GB左右。(您希望为开销和操作系统保留一些内存)


您已将最大堆大小设置为1500m,虽然JVM可以使用略多于该~200MB的内存,但这就是您限制该进程的全部内容

尝试将进度限制在5GB左右。(您希望为开销和操作系统保留一些内存)


Xbootclasspath
之前选择以下选项:

java -XX:MaxPermSize=512m -server -Dfile.encoding=UTF-8 -Xmx8g -XX:+UseCompressedOops
这将使它使用更多的内存,也将确保它使用尽可能少的内存来寻址64位机器中的对象


-XX:MaxPermSize=512m
使perm gem空间更大(这可能是因为您使用了大量堆内存),而
-XX:+UseCompressedOops
将使对象使用32位寻址,而不是64位,因为8gb堆可以用32位正确寻址,因此,它可以减少分配对象时使用的内存。

Xbootclasspath
之前选择以下选项:

java -XX:MaxPermSize=512m -server -Dfile.encoding=UTF-8 -Xmx8g -XX:+UseCompressedOops
这将使它使用更多的内存,也将确保它使用尽可能少的内存来寻址64位机器中的对象


-XX:MaxPermSize=512m
使perm gem空间更大(这可能是因为您使用了大量堆内存),而
-XX:+UseCompressedOops
将使对象使用32位寻址,而不是64位,因为8gb堆可以用32位正确寻址,因此,它可以减少分配对象时使用的内存。

尝试增加Xmx(最大堆)。您当前的设置略低于1.5GB。您如何知道它正在使用6GB的RAM?您所说的“未使用下一个6GB”是什么意思?请尝试增加Xmx(最大堆)。您当前的设置略低于1.5GB。您如何知道它正在使用6GB的RAM?你说的“下一个6GB不被使用”是什么意思?我很好奇,为什么这个被否决了?这个答案有问题吗?谁知道呢?还有一个答案也是正确的,并被否决。看起来所有者删除了它。在这种情况下,IMHO设置MaxPermSize有点过早优化。到目前为止,还没有迹象表明,topic starter的永久性激素不足。我很好奇,为什么这一点会被否决?这个答案有问题吗?谁知道呢?还有一个答案也是正确的,并被否决。看起来所有者删除了它。在这种情况下,IMHO设置MaxPermSize有点过早优化。到目前为止,还没有迹象表明topic starter的PermGen不足。