gpt4 book ai didi

java - 何时收集垃圾

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:29:46 26 4
gpt4 key购买 nike

我有一段代码可以在内存中加载一个非常大的图像。所以调用

似乎是一个合理的事情
System.gc();

在加载图像之前。据我所知,它可以正常工作。

昨天我决定使用一个非常有用的软件,叫做 FindBugs扫描您的代码并报告可能导致错误或通常不建议的策略的问题。问题是我提到的这段代码被报告了。描述是这样的:

... forces garbage collection; extremely dubious except in benchmarking code

它继续详细说明:

Code explicitly invokes garbage collection. Except for specific use in benchmarking, this is very dubious.

In the past, situations where people have explicitly invoked the garbage collector in routines such as close or finalize methods has led to huge performance black holes. Garbage collection can be expensive. Any situation that forces hundreds or thousands of garbage collections will bring the machine to a crawl.

所以我的问题是:在这种情况下以编程方式调用垃圾收集器是否可行?我的代码只调用它一次,它所在的方法很少被使用。如果不能调用它,那么在执行内存密集型操作之前需要尽可能多的内存并且需要在此之前释放尽可能多的内存的情况下,您应该怎么做?

最佳答案

您是否通过 System.gc() 获得了任何性能改进?我不这么认为,因为在加载图像之前您可能没有很多需要收集的对象。

通常现代垃圾收集器最清楚什么时候运行,所以你不应该强制收集,除非你有一个非常非常好的理由。 (例如该插件建议的基准测试应用程序)

顺便说一句:调用 System.gc() 会建议 VM 执行“完整”或“大”收集,这意味着所有线程都将很快停止。否则它可能只会进行“小型”垃圾回收,而不会停止所有线程。

使用 -verbose:gc 运行您的程序以查看收集了多少字节。

这里还有很多关于垃圾回收的技术信息: http://java.sun.com/developer/technicalArticles/Programming/GCPortal/

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

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