我有一段代码可以在内存中加载一个非常大的图像。所以这似乎是一个合理的事情
System.gc();
在加载图像之前。据我所知,它没有问题。
昨天我决定使用一个非常有用的软件,叫做FindBugs,它会扫描你的代码并报告可能导致错误或通常不建议策略的问题。问题是我提到的这段代码被报告了。描述是这样的:
...强制垃圾收集;非常可疑,除非在基准测试代码中
它继续详细说明:
代码显式调用垃圾收集。除了在基准测试中的特定用途外,这是非常可疑的。
过去,人们在 close 或 finalize 方法等例程中显式调用垃圾收集器的情况导致了巨大的性能黑洞。垃圾收集可能很昂贵。任何强制进行成百上千次垃圾收集的情况都会使机器爬行。
所以我的问题是:在这种情况下以编程方式调用垃圾收集器是不是不行?我的代码只调用它一次,它所在的方法很少使用。如果不能调用它,那么在执行内存密集型操作之前需要尽可能多的内存并且需要在它之前释放尽可能多的内存的情况下应该怎么做?