gpt4 book ai didi

java - JVM 和 GC 调整 - 无 Full GC 的理论

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:19 24 4
gpt4 key购买 nike

我有两种类型的对象的大型应用程序:长生命周期(缓存)和短生命周期(请求-处理-响应)。理论上,对于这种类型的应用程序,我认为可以配置 Young vs Old 空间,因此 Old 空间消耗是恒定的,从而不会发生 Full GC。

我已经更改了 newSize-maxNewSize 参数,但是,旧堆继续上升,直到 Full GC。每次 Full GC 后,消耗下降到 20%(缓存占用 20%)。出于某种原因,我的对象进入旧空间。我有两个怀疑为什么被转移到旧空间:

  • 根据这篇文章:http://chaoticjava.com/posts/gc-tips-and-memory-leaks/它被告知如果您分配了大对象,这些对象将直接进入旧空间。是这样吗,如果是,有没有JVM Option参数可以设置Young空间的对象大小阈值?

  • 如果我对这个过程的理解是正确的,对象在移动到旧部分之前会在 To-From 生存部分之间切换。是否有参数可以设置在移动到旧空间之前要在 To 和 From 之间进行多少次切换?

还有什么建议吗?

谢谢,阿马尔

最佳答案

听起来您的幸存者空间确实不够大。您需要使它们足够大,以便不需要收集任何对象。一个对象只会进出幸存者空间一次。

如果您正在分配大型对象,您可以为它们使用一个对象池来避免对它们进行 GC。您是否也考虑过为您的请求/处理/响应数据使用对象池?例如一个简单的方法是使用 ThreadLocal。

您是否尝试过 G1 收集器,它旨在逐步收集所有内存并减少完整 GC 的巨大冲击。

关于java - JVM 和 GC 调整 - 无 Full GC 的理论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6226211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com