【发布时间】:2016-03-06 08:08:17
【问题描述】:
我尝试在我的程序中使用 G1GC。程序用于具有各种内存大小的各种机器:具有 1Gb 内存(最小)的 VPS、具有 8Gb 内存的台式机、具有 32Gb 内存(最大)的 DS。我注意到即使有很多可用内存,G1GC 也不会保留更多内存(例如,G1GC 在我的机器上保留的内存不超过 3Gb,总共 8Gb / 4Gb 空闲)
附:我想要通用的解决方案。我无法为每种类型的机器创建单独的版本或单独的运行脚本。
【问题讨论】:
-
想要保留更多内存的原因是什么(假设您想要更大的堆)? G1 具有较小堆的原因是因为它通常比并行收集器更快地收集垃圾(例如,收集发生得更快并且垃圾被识别得更快)。
-
@Jire 所有保留的内存都已被使用,无法被 GC 回收。 G1GC 尝试收集垃圾而不是保留更多内存。所以,我的应用做 GC 而不是真正的工作。
-
也许 G1GC 不是您应用的正确选择。如果可能,您是否考虑过尝试减少应用程序热点中的垃圾创建?
-
@Jire 是的,看起来 G1GC 对我的应用程序来说不是一个好选择(我在 SerialGC 和额外的应用内内存检查方面有更好的性能)。在当前情况下:所有保留的内存都用于存储永久对象。而且我想存储更多永久对象。
-
@Xupypr MV:你能发布你的 G1GC 参数吗?通过微调相关参数,我使用 G1GC 得到了很好的结果。看看:stackoverflow.com/questions/8111310/…
标签: java garbage-collection g1gc