java:为什么在-Xms和-Xmx不相等时调用完整的GC?

时间:2016-12-22 13:53:15

标签: java garbage-collection

我正在阅读关于java GC的文档

  

旧的或永久的内存空间已满,并且需要容纳新的对象或类   如果相关参数具有不同的值,则向其最大尺寸扩展。换句话说,如果   -Xms和-Xmx具有不同的值,如果Old的大小需要从-Xms增加到-Xmx   为了容纳更多的对象,调用FullGC。同样,如果-XX:PermSize和-XX:MaxPermSize有   不同的值和永久空间需要增加到-XX:MaxPermSize到   容纳新的java类,调用FullGC。始终设置-Xms和-Xmx可以避免这种情况   以及-XX:PermSize和-XX:MaxPermSize为相同的值。

想知道为什么在这种情况下调用FullGC?有什么用?

2 个答案:

答案 0 :(得分:1)

调整堆大小不仅仅是添加更多内存。 GC使用的数据结构必须调整大小,这需要执行FullGC才能执行此操作。

答案 1 :(得分:0)

  • -Xms和-Xmx不确定应用程序所需的内存量。
  • 如果-Xms值与-Xmx不同,则会调用完整GC 调整堆大小以满足应用程序的内存要求。
  • 如果上述参数相同,则将避免调整大小 总而言之,因为您的应用程序使用堆启动 足够大了。简而言之,您对JVM说,我的应用程序永远不需要堆大于此。