2015-10-20 49 views
1

我已经阅读了关于此的所有其他问题以及其他互联网上的许多文章。据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

+0

[直接字节缓冲区](http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#allocateDirect%28int% 29)不计入JVM。此外,您可能调用的任何本机(JNI)代码也可以根据需要分配尽可能多的内存。 – JimmyB

+0

据我所知,JVM分配的内存大于最大堆大小所指定的内存量。 –

+0

你知道有多少个线程吗? - 在Linux上,你可以使用strace来运行你的应用程序(也许在Emacs shell中),以查看程序是否使用系统调用来分配堆内外的内存,堆栈等。 – laune

回答

0

尝试为缓冲池的VisualVM的插件。你可以看到有多少直接和映射的内存分配了

+0

它看起来不那么重要。使用的映射内存为0个字节,使用的直接内存大约为0.14 GB。我应该如何解读这些数据? –

+0

当Java进程占用所有内存时,堆的行为是增长还是稳定? –

+0

一旦程序完成加载RAM大约3Gbs关闭。当我登录到一个世界时,内存缓慢增加到7GBs,然后它变得太慢,无法播放。该堆在2300 MBs处保持稳定,这是我-Xmx的价值。 –

相关问题