gpt4 book ai didi

java - 在 Java 中预分配对象有哪些问题?

转载 作者:IT王子 更新时间:2023-10-28 23:36:02 24 4
gpt4 key购买 nike

在过去的几个月里,我们一直在调整我们的生产应用程序,这样我们就不会遇到完整的 GC。我们现在只体验年轻 GC,年轻 GC 的速率取决于对象分配的速率。

我们的应用程序需要尽可能接近“实时”,所以现在我们正在尝试减少年轻 GC 的数量。正如老公理所说,我们分配的大部分数据最终都成为垃圾并在下一次年轻 GC 时被丢弃。所以不需要为这种类型的数据预先分配。然而,我们知道有大量的对象(由类型定义)可以从年轻 GC 到老 GC。

在更理想的时间(即在启动时)预分配这些对象是否有意义,这样我们最终会在不太理想的时间分配更少的资源?我读过文献,其中提到不建议在最新的 JVM 中使用对象池,因为分配要便宜得多。我知道预分配对象会进入旧 GC 的缺点是什么?

最佳答案

降低分配率会使 GC“暂停”的频率降低,但不会缩短。为了更流畅的“实时”操作,您实际上可能希望增加 GC 调用的数量:这是为了获得更短的暂停时间而交易更多与 GC 相关的 CPU。 Sun 的 JVM 可以通过各种调整 options ;我建议尝试 -XX:NewRatio 使年轻代更小。

反对池的通常论点是,您基本上是在尝试编写自己的分配器,希望您在这方面做得比 JVM 分配器更好。在分配昂贵的某些特定情况下是合理的,例如创建 Thread 实例。

关于java - 在 Java 中预分配对象有哪些问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2357369/

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