gpt4 book ai didi

java - System.gc问题

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

我正在运行一个带有垃圾收集片段的调度算法,如下所示:

    //garbage collection
if (state.children.isEmpty()) {//if this is a leaf node (no children)
state.parent.children.remove(state);
System.gc();
}

起初,算法运行平稳,没有停顿;但是过了一会儿,随着树开始变大,每次 gc 都会有某种暂停。

所以我想,也许如果调用 gc 的频率较低?并将我的代码修改为:

    //garbage collection
if (state.children.isEmpty()) {//if this is a leaf node (no children)
state.parent.children.remove(state);
if(index % 10000)
System.gc();
}

但这似乎并没有真正进行任何清理,我的程序无论如何都会抛出一个 outOfMemory 异常。

我应该如何正确实现我的垃圾收集器才不会被调用太多次?

最佳答案

您根本不需要显式调用垃圾收集器。它偶尔是合适的,但如果你发现你需要它,我通常会非常怀疑。

您是否尝试过在启用详细 GC 日志记录的情况下运行?一开始可能很难理解,但它应该向您展示发生了什么。我不会惊讶地发现实际上你在某个地方有泄漏,只是通过在每次迭代中进行 GC,你已经足够慢你的程序以至于你还没有达到它会咬人。

您为虚拟机分配了多少内存?调整内存设置(实际上是 GC 设置)会对某些工作负载产生重大影响。

关于java - System.gc问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394597/

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