gpt4 book ai didi

Java 垃圾回收和原子事件/停止 gc 暂停中断一系列函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:18:09 27 4
gpt4 key购买 nike

我有一个复杂的大型多线程应用程序,我正在为其引入新功能。

我添加了对一个专业硬件的调用(通过供应商提供的 JNI 库)。然而,在此(非常快的)函数被调用之前,一些工作是预先完成的,以填充发送给它的数据结构。

然而,应用程序的 GC 配置文件非常不稳定/糟糕,并且这些填充步骤中的一些似乎被 GC 中断了。这很重要,因为在这些事件中的第一个事件和移交给硬件资源之间的时间需要保持恒定或尽可能恒定。

有没有办法说“为 GC 同步”,这些操作不会在 stop the world GC 暂停期间被阻止?

在 RHL5.5 上使用 64 位 1.7 JDK

谢谢

最佳答案

如果实际上是在完整垃圾收集期间遇到问题,那么问题是您可以做些什么来降低这些完整垃圾收集扫描的频率。

首先,尝试分析是什么情况触发了这些完全扫描,一般来说,您的堆空间是否不足?如果是这样,为什么您经常在堆上运行不足(某处是否存在潜在泄漏?)

此外,在较小的(较快的)垃圾回收期间,对象从年轻代(eden 和 survivor 1)移动到 survivor 2。如果它不适合 survivor 2,它们将被移动到 tenured,如果有tenured 中没有足够的空间,您会触发全面扫描。因此,如果您的新生代很大,并且您有一定数量的长时间运行的对象,这可能会导致问题。

归根结底,您必须对其进行分析。分析您的应用程序,并确定您何时以及为何看到完整的垃圾收集,然后调整您的应用程序以降低它们的频率或可能确保它们发生的频率非常低,您可以“控制”它们何时发生。

关于Java 垃圾回收和原子事件/停止 gc 暂停中断一系列函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15635823/

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