Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java在ram较大的机器上运行时会使用更多内存吗_Java_Memory_Memory Management_Garbage Collection_Out Of Memory - Fatal编程技术网

java在ram较大的机器上运行时会使用更多内存吗

java在ram较大的机器上运行时会使用更多内存吗,java,memory,memory-management,garbage-collection,out-of-memory,Java,Memory,Memory Management,Garbage Collection,Out Of Memory,如果我有一个较小的ram机器和一个较大的ram机器。我在它们上运行相同的java代码。 jvm会在ram较大的机器上更惰性地进行垃圾收集吗 我试图解决的问题是内存不足。人们报告说他们的小型ram机器内存不足。我想测试一下,但我现在拥有的唯一一台机器的内存比他们的大得多。我想知道,如果我在这个较大的ram机器上进行测试,并跟踪内存使用情况,那么在较小的ram机器上内存使用情况是否相同,或者它将使用更少的内存 谢谢! Erben您需要查看JVM内存参数。实际上,您可以为JVM设置任意多的内存: -X

如果我有一个较小的ram机器和一个较大的ram机器。我在它们上运行相同的java代码。 jvm会在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
在我妻子的笔记本电脑(Windows8.1,4GRAM,32位Java运行时)上是247.5MB,而在我的笔记本电脑(Windows7,8GB RAM,64位Java运行时)上是903.12MB

这是由Java决定的(请参阅,尽管这里显示的值是针对服务器类机器的,但它们可能不同于普通机器)

如果您希望虚拟机模拟低RAM的机器,只需使用-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

这并不能回答问题。OP询问JVM是否自然地减少垃圾收集,并在有更多可用内存时使用更多的ram(我猜是默认设置)@George你能仔细检查这个问题和我的答案吗。谢谢。我已经仔细看过了。您的回答可能会解决OP的问题,但它没有回答OP提出的问题:
jvm会在ram较大的机器上更懒地进行垃圾收集吗?
就个人而言,我对自己很好奇:)
jvm会在ram更大的机器上更懒地进行垃圾收集吗?
正如我所说的,如果在两台机器上设置相同的参数,则不会这样做,因为无论如何,两台jvm分配了相同数量的机器资源,@George如果你知道这不是正确的答案,那么我想你知道正确的答案,那么你为什么不回答它,而不是一直告诉人们他们的答案不是正确的答案!!,试着做个积极的孩子!!没有必要怀有敌意,我没有否决你的答案。您的答案可能很好地解决了OP的问题,但它没有解决JVM在正常/标准条件下的标准垃圾收集行为问题。我希望有人能来解决这个问题,因为我真的很好奇。为了精确地建模,你可以启动一个虚拟程序来消耗多余的内存。请注意,您必须真正访问内存,否则它只能得到“虚拟分配”。同时关闭交换。也就是说,我相信使用
-Xmx
就足够了。