使用较大的RAM在机器上运行时,Java会使用更多内存



如果我有一个较小的镜头机和较大的镜头机。我在它们上运行相同的Java代码。JVM会用更大的RAM在机器上更懒惰地进行垃圾收集吗?

我试图解决的问题是一个失败的问题。人们报告说,他们在小型RAM机器上存在记忆问题。我想测试一下,但是我现在拥有的唯一机器比他们的RAM大得多。我想知道我是否在这台较大的RAM机器上进行测试并跟踪内存使用情况,内存使用量会在较小的RAM机器上使用,还是将使用更少的内存?

谢谢!Erben

您需要查看JVM内存参数。实际上,您可以将任意多的内存设置为您的JVM:

-Xmx2048m -> this param to set the max memory that the JVM can allocate
-Xms1024m -> the init memory that JVM will allocate on the start up
-XX:MaxPermSize=512M -> this for the max Permanent Generation memory

因此,在您的情况下,您可以像另一台计算机中一样设置大量内存。因此,您的机器不会比XMX值

更重要

,您可能还需要检查此参数。

-XX:MaxNewSize=  -> this need to be 40% from your Xmx value
-XX:NewSize=614m -> this need to be 40% from your Xmx value

您也可以告诉您JVM使用哪种类型的GC:

-XX:+UseConcMarkSweepGC

因此,如果您在两台机器中设置此参数,则将获得相同的结果,并且很可能是相同的GC活动。

是的。这取决于默认的最大堆大小。您可以使用此命令检查当前的最大堆大小:

java -XshowSettings:vm

在我妻子的笔记本电脑上(Windows 8.1,4 GB RAM,32位 - java-runtime)是247.5 MB,而在我的笔记本电脑上(Windows 7,8 GB RAM,64 bit-java-runtime)是903.12 mb。

这是由Java确定的(请参阅https://stackoverflow.com/a/46667635/3236102,尽管其中显示的值适用于Server-Class-Machines,但它们可能与普通机器不同)。

)。

如果您希望VM模拟低射击机器,只需使用-XMX标志将计算机限制为更少的RAM(例如-XMX128M,用于128 MB RAM分配)。

最好的事情可能是询问遇到内存问题的用户检查其最大堆尺寸(使用上面的命令),并将您的计算机设置为相同的最大堆尺寸,因此您的条件与相同的条件他们有。

可以用较大的RAM复制问题。

首先,您需要从报告该问题的人那里获得堆尺寸的配置。使用相同的堆大小来复制问题。

使用下面的JVM参数进行堆设置。

-Xmx512m   Max heap memory that is used to store objects
-XX:MaxPermSize=64m   Max perm gen size. This space is used to store meta info like loaded classes etc

最新更新