Wann man Müll sammelt

Ich habe einen Code, der ein sehr großes Bild in den Speicher lädt. Es schien also vernünftig, anzurufen

System.gc();

vor dem Laden des Bildes. Soweit ich weiß, funktioniert es ohne Probleme.

Gestern habe ich mich für eine nützliche Software namens entschiedenFindBugs Das scannt Ihren Code und meldet Probleme, die Fehler verursachen könnten oder generell nicht empfohlene Strategien. Das Problem ist, dass dieser Code, den ich erwähnt habe, gemeldet wird. Die Beschreibung lautet wie folgt:

... erzwingt die Müllabfuhr; äußerst zweifelhaft, außer im Benchmarking-Code

Und es geht weiter zu erarbeiten:

Code ruft die Garbage Collection explizit auf. Abgesehen von der spezifischen Verwendung beim Benchmarking ist dies sehr zweifelhaft.

In der Vergangenheit führten Situationen, in denen Benutzer den Garbage Collector in Routinen wie Close- oder Finalize-Methoden explizit aufgerufen haben, zu einer enormen Leistungsschwäche. Abfallsammlung kann teuer sein. Jede Situation, die Hunderte oder Tausende von Garbage Collections erzwingt, bringt die Maschine zum Crawlen.

Meine Frage lautet also:Ist es in einem solchen Fall NICHT OK, den Garbage Collector programmgesteuert aufzurufen? Mein Code ruft es nur einmal auf und die Methode, in der es sich befindet, wird selten verwendet. Und wenn es nicht in Ordnung ist, es aufzurufen, was sollten Sie dann tun, wenn Sie vor einer sehr speicherintensiven Operation so viel Speicher wie möglich benötigen und zuvor so viel Speicher wie möglich freigeben müssen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage