java GC 当所有 objects 都英年早逝
java GC when all objects die young
当字面上所有 objects 都非常年轻时,您会为这种情况建议什么 GC 设置?
我有 8 Gb 堆,默认情况下 1.495 Gb 用于 Eden,191 Mb 用于每个 Survivor space。
我知道,Tenured 永远不会增长,它始终保持 0.01% 的占用率。
但是我每 2-3 分钟就有一次伊甸园 collection。
在 Tenured 中放弃未使用的 space 毫无意义(或使它成为现实?)?
你的建议是什么?
不危险。只要堆能舒适地装入主内存,您就不会有问题。我还建议您尽可能使用压缩 oops(通过保持堆 < 32 GB)
我经常有一个 24 GB 的伊甸园,所以如果我每小时产生 1 GB 的垃圾,我每天就会得到一个小收集。 (实际上我每天都在已知时间安排完整的收集)
您应该认真考虑的一件事是使用 Java 8,因为 JVM 具有有效的逃逸分析。这意味着非常短暂的对象被放置在堆栈上并且根本不使用堆。
需要记住的是,收集伊甸园的成本基本上与保留对象的数量和大小成正比。拥有一个几乎什么都不保留的伊甸园,收集一个 8 GB 伊甸园的时间大约是一个 8 MB 伊甸园的两倍。
增加 Eden 大小可以让您的对象有更多时间在 Eden 中消亡 space 并避免被复制到幸存者。
当字面上所有 objects 都非常年轻时,您会为这种情况建议什么 GC 设置? 我有 8 Gb 堆,默认情况下 1.495 Gb 用于 Eden,191 Mb 用于每个 Survivor space。 我知道,Tenured 永远不会增长,它始终保持 0.01% 的占用率。 但是我每 2-3 分钟就有一次伊甸园 collection。 在 Tenured 中放弃未使用的 space 毫无意义(或使它成为现实?)? 你的建议是什么?
不危险。只要堆能舒适地装入主内存,您就不会有问题。我还建议您尽可能使用压缩 oops(通过保持堆 < 32 GB) 我经常有一个 24 GB 的伊甸园,所以如果我每小时产生 1 GB 的垃圾,我每天就会得到一个小收集。 (实际上我每天都在已知时间安排完整的收集)
您应该认真考虑的一件事是使用 Java 8,因为 JVM 具有有效的逃逸分析。这意味着非常短暂的对象被放置在堆栈上并且根本不使用堆。
需要记住的是,收集伊甸园的成本基本上与保留对象的数量和大小成正比。拥有一个几乎什么都不保留的伊甸园,收集一个 8 GB 伊甸园的时间大约是一个 8 MB 伊甸园的两倍。 增加 Eden 大小可以让您的对象有更多时间在 Eden 中消亡 space 并避免被复制到幸存者。