gpt4 book ai didi

java - 智能垃圾收集?

转载 作者:搜寻专家 更新时间:2023-11-01 04:00:15 25 4
gpt4 key购买 nike

您可以简单地通过调用 System.gc() 在 Java 中进行垃圾收集,但有时这会“拖延”应用程序。像这样收集垃圾并避免停顿是个坏主意吗:

new Thread(new Runnable() {
public void run() {
System.gc();
}
}).start();

或者这会导致更多问题吗?

最佳答案

首要事项:不要显式调用 GC

除非你有充分的理由。即使您认为自己知道,您也可能没有。

GC 知道它在做什么(大部分时间...)

如果你继续阅读,我假设你有一个非常好的(尽管可能是扭曲的)理由来尝试搞砸 GC,即使它很可能比你决定什么时候聪明得多它应该收集内存。另外,请记住,通过明确地调用它,您会混淆它并搞砸它的启发式方法,因此它变得不如以前聪明。都是因为你试图智取它。

GC 并不总是关心你说什么

如果您出于非常充分的理由这样做,或者在您确实想要确保以尽可能最佳的内存状态启动密集代码段的情况下,您需要知道这可能行不通:调用System.gc() 不保证发生垃圾收集,如前所述 by its Javadoc (强调我的):

Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects.

其他推荐

追捕并杀死(坏的)显式 GC

  • 打开 -XX:+DisableExplicitGC(如果您的 JVM 支持它)以防止那些疯狂调用造成任何伤害(在评论中归功于 Fredrik)
  • 使用您最喜欢的 IDE 或 grep 查找对 System.gc() 及其等价物的调用并删除它们。

另辟蹊径

参见 Grooveek's answer获取其他有用的建议(例如使用 WeakReference)。

试验其他 GC 并为您的应用微调您的 VM

根据您的用例,尝试其他 GC 实现可能会有所帮助:CMC、G1、ParallelGC 等...如果您想避免“停顿”,自从 G1 在最新的 Java SE 6 更新和自 Java 7 发布以来,长时间运行密集型企业应用程序。

请注意,JVM 调优是一门非常复杂的艺术。

延伸阅读

您可以翻阅这些以获得更多详细信息:

* 谨慎使用:有时不是最新的,没有记录所有内容,并列出了很多实验性功能,或仅限 HotSpot 的功能。

关于java - 智能垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6193433/

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