gpt4 book ai didi

Java堆溢出,强制垃圾收集

转载 作者:行者123 更新时间:2023-12-03 19:05:18 25 4
gpt4 key购买 nike

我已经创建了一个带有子数组的 trie 树。删除单词时,我将子项设置为 null,我认为这会删除节点(删除是一个相对术语)。我知道 null 不会删除子项,只是将其设置为 null,这在使用大量单词时会导致堆溢出。

在 linux 上运行 top,我可以看到我的内存使用量很快飙升至 1gb,但如果我在删除 (Runtime.gc()) 后强制进行垃圾回收,内存使用量将达到 50mb 并且永远不会超过该值。据我所知,java 默认情况下会在堆溢出发生之前运行垃圾回收,但我看不到它会发生。

最佳答案

(评论太长了)

与流行的看法相反,您可以确实在 Java 中强制执行 GC,但这不是使用 System.gc() 完成的。真正强制 GC 的方法是使用 JVMTI 的 ForceGarbageCollection() 调用。不要问我更多,我在这里问了一个问题,但没有人觉得它有趣(没有投票),也没有人能回答它,但是 JVMTI 的 ForceGarbageCollection() 是许多 Java 程序,如 IntelliJ、NetBeans 、VisualVM、Eclipse 等。确实会强制执行 GC:

Java: How do you really force a GC using JVMTI's ForceGargabeCollection?

现在...您可能不想这样做并且您可能不想想要使用“不保证”系统来提示 GC。 gc() 调用。

您从多少个单词开始出现问题?当您需要处理大量单词时,数据结构非常紧凑。您确定您使用的是正确的数据结构并且您确定没有泄漏吗?

关于Java堆溢出,强制垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2429623/

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