Java:当-Xms和-Xmx不相等时,为什么会被称为Full GC?

3
我正在阅读有关Java GC的文档。
一个内存空间,无论是Old还是Permanent,如果满了,并且需要为新对象或类腾出空间,它就需要向其最大大小扩展,如果相关参数具有不同的值。换句话说,如果‐Xms和‐Xmx具有不同的值,并且如果需要将Old的大小从‐Xms增加到‐Xmx以容纳更多对象,则会进行FullGC。同样,如果‐XX:PermSize和‐XX:MaxPermSize具有不同的值,并且需要将Permanent Space增加到‐XX:MaxPermSize以容纳新的Java类,则会进行FullGC。通过始终将‐Xms和‐Xmx以及‐XX:PermSize和‐XX:MaxPermSize设置为相同的值可以避免这种情况。
想知道为什么在这种情况下要调用FullGC?它有什么用处吗?
2个回答

2

调整堆大小不仅仅是添加更多的内存。垃圾回收器使用的数据结构必须被调整大小,这需要执行FullGC来完成此操作。


0
  • -Xms和-Xmx并不确定应用程序所需的内存量。
  • 如果-Xms值与-Xmx不同,则会调用full GC以调整堆大小,以满足应用程序的内存需求。
  • 如果上述参数相同,则将完全避免调整大小,因为您的应用程序启动时具有足够大的堆。简而言之,您告诉JVM,我的应用程序永远不需要比这更大的堆。

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