gpt4 book ai didi

java - 时隙系统中的垃圾收集

转载 作者:行者123 更新时间:2023-11-30 04:09:51 25 4
gpt4 key购买 nike

我有一个slotted java系统,每2秒运行一次代码,每次运行的时间不到100毫秒。我想避免在 100 毫秒运行期间运行垃圾收集,但在系统空闲的剩余 1.9 秒内运行它。目前,垃圾收集可能会在这 100 毫秒内运行,并增加大约 100 毫秒,这在我的情况下是 Not Acceptable 。

程序占用内存约2G,在这100ms内可能会创建很多小对象。我还在多核系统(4 核及更多)上运行它。

最佳答案

这看起来像是 calling System.gc() is useful 时的少数情况。不能保证它有帮助,但肯定值得一试。

您也可以尝试我最近提出的hack。这有点复杂,并且可能会适得其反。

  • 在空闲期间分配大量内存。
  • 以这样一种方式进行操作,即不会将任何对象提升到老年代(因为 GC 的成本很高)。
  • 确保整个分配不会被优化掉(应该像 sum += new byte[123456].hashCode() 那样)
  • 当您分配了足够的空间来启动 GC 时停止。这是棘手的部分:
    • 您可以使用终结器(或更好的 ReferenceQueue<PhantomReference> ),但不能保证它会在 GC 后立即运行
    • 您可以观看 runtime.getFreeMemory ,但谁知道它是否可靠工作?
    • 您可以尝试 GarbageCollectorMXBean
    • 作为最后的手段,您可以使用 -XX:+UnlockDiagnosticVMOptions -XX:+PrintGC 从外部观看

正如我所说,这只是在没有合理的解决方案有效的情况下进行的黑客攻击。

关于java - 时隙系统中的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897464/

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