我已经阅读了关于此的所有其他问题以及其他互联网上的许多文章。据this site,最大内存使用量按照公式:我试过了一切,但我不能限制Java RAM的最大使用率
Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss]
旗我已经试过:
-Xss[16-128M]
-XX:MetaspaceSize=[64-256M] -XX:MaxMetaSpace=[64-256M]
-XX:PermSize=[128-256M] -XX:MaxPermSize[128-256M]
不过,当我启动我的-Xmx2G,所有这些标志,RAM Java应用程序使用率缓慢上升到6+ GB,并且当它不能分配超过我的8GB系统时,最终停止或冻结。
背景:计划是一个游戏,我运行Linux和Java 8
[直接字节缓冲区](http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#allocateDirect%28int% 29)不计入JVM。此外,您可能调用的任何本机(JNI)代码也可以根据需要分配尽可能多的内存。 – JimmyB
据我所知,JVM分配的内存大于最大堆大小所指定的内存量。 –
你知道有多少个线程吗? - 在Linux上,你可以使用strace来运行你的应用程序(也许在Emacs shell中),以查看程序是否使用系统调用来分配堆内外的内存,堆栈等。 – laune