这里有很多关于“如何增加堆大小”的问题,但我想了解这些设置如何实际影响Java应用程序的内存消耗(在我的情况下是Eclipse IDE但是我想这没关系。)
我的JVM使用以下参数启动:
-Xms512m
-Xmx1024m
所以我希望当执行内存要求时,堆大小将达到1024 MB。但是,我只看到Eclipse最多分配700-800 MB 。
(如果我正确理解了条形,黄色部分是当前分配,整个条形图是最大分配,并且有一些“标记”,我不知道它是什么)。
当我开始编译一个大型项目时,我会定期看到黄色栏上升,达到整个栏的90%,然后再回到200-300 MB 。这不利用最大允许的1024MB,是吗?
如果有人可以向我解释这种行为并且可能如何改变它,那就太好了。
BTW,我的Eclipse是带有64位JVM的64位版本,如果这很重要(尽管如此,1024限制也应该适用于32位)。答案 0 :(得分:3)
Xmx是一个硬限制。如果GC能够在达到最大限制之前清除对象/降低内存消耗,则不会达到最大值。
如果你有理由需要1GB的内存消耗,只需将Xms和Xmx设置为相同的大小。