JVM如何计算已提交的堆内存?

6
根据文档:https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryUsage.html committed - 表示Java虚拟机保证为其使用而可用的内存量(以字节为单位)。承诺的内存量可能会随时间变化(增加或减少)。Java虚拟机可能会将内存释放给系统,因此committed可能小于init。committed始终大于或等于used。
但问题是JVM如何计算committed内存?

与 https://dev59.com/7lgR5IYBdhLWcg3wUL4J 密切相关。 - Raedwald
该策略在很大程度上依赖于JVM和GC版本。不同的版本提供不同的策略。 - Sofo Gial
你想知道JVM如何计算它从操作系统请求的内存量或当前已提交的内存量吗? - dpr
@dpr,我知道承诺的内存量可能会随时间而改变(增加或减少),我想知道承诺内存增加/减少的基础。 - Andoy Abarquez
@Andrew 你可以在这里找到一些相关信息:https://docs.oracle.com/javase/9/gctuning/factors-affecting-garbage-collection-performance.htm#JSGCT-GUID-6635C481-AE78-485A-A184-A1709712961A - Sofo Gial
说实话,我不理解你的问题。JVM的初始分配内存是-Xms值,如果你的应用程序需要更多的内存,这个值会增加,直到达到-Xmx - Eugene
1个回答

1

在这里,您可以找到更多细节,但它并没有解释承诺堆空间增加的确切方式:

还有一个已承诺的堆大小,它充当“高水位标记”,一旦JVM即使在旧收集/年轻收集中也无法释放空间以腾出空间,就会上升。 在这种情况下,已承诺的堆大小会增加。此周期重复,直到已承诺的堆大小与最大堆大小(可分配的最大空间)相匹配。

https://support.mulesoft.com/s/article/Java-JVM-memory-allocation-pattern-explained


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接