Java堆大小没有完全使用

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我目前正在使用Visual VM监控正在运行的Java应用程序:http : //visualvm.java.net/

我用-Xmx128m强调内存使用情况。

在运行时,我看到堆大小增加到128m(如预期的那样),但是在遇到Java堆空间错误之前,使用的堆收敛到大约105m。

为什么这些剩余的20米,没有使用?

提问于
用户回答回答于

堆在年轻一代(伊甸园空间和两个相同大小的幸存者空间通常被称为From和To),老一代(终身)和永久空间分开。

Xmx/Xms选项设置整个堆大小。因此,一个区域(默认大小)实际上是永久空间 - 也许,我们不知道有关压力测试的细节,实际上没有任何物体从伊甸园转移到终身或永久物,所以这些区域在伊甸园用完时仍然是空的的空间。

用户回答回答于

Java将其内存分解成几代。如果终身代填充,则可能会出现堆空间错误。通常情况下,它们会动态调整大小,但如果您设置了固定大小,则不会。

扫码关注云+社区