I have a piece of code that load a very big image in memory. So it seemed like a reasonable thing to call
System.gc();
before loading the image. From what I can tell it works with no issues.
Yesterday i decided to use a pretty useful piece of software called FindBugs that scans your code and reports back issues that might cause bugs or generally not advised strategies. The problem is that this piece of code i mentioned gets reported. The description is this:
... forces garbage collection;
extremely dubious except in
benchmarking code
And it goes on to elaborate :
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.
So my question is : Is it NOT OK to programmatically call the garbage collector in such a case? My code only calls it once and the method that it is in gets used rarely. And if it is not OK to call it then what should you do in a case where you need as much memory as possible before doing a very memory intensive operation and you need to free as much memory as posible prior to it?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…