System.gc-Aufruf für die Garbage Collection

Bei der Garbage Collection handelt es sich um den Prozess der Rückgewinnung des verwendeten Speichers, bei dem es sich nicht um Referenzobjekte in der Anwendung handelt. Java Virtual Machine (JVM) führt den Hintergrundthread zur Überwachung der Objektreferenzen aus und wird regelmäßig ausgeführt, um den Speicher zu beanspruchen. Dieser Thread wird mit niedriger Priorität ausgeführt, da die Leistung von JVM bei der Ausführung dieses Threads beeinträchtigt wird, wodurch alle anderen Threads für einige Sekunden gestoppt werden. System.gc() ist die Methode, die der JVM die Garbage Collection vorschlägt. Dies ist jedoch nicht garantiert.

System.gc() wird von der VM implementiert und was es tut, ist Implementierungsspezifisch. Der Implementierer könnte beispielsweise einfach zurückkehren und nichts tun.

Schauen Sie sich das folgende einfache Beispiel an.

package javabeat.net.system;
import java.lang.*;
public class GCDemo {
   public static void main(String() args) {
     int arr1() = { 0, 10, 20, 30, 40, 50 };
     int arr2() = { 0, 100, 200, 300, 400, 500 };

     System.arraycopy(arr1, 0, arr2, 0, 1);
     System.out.print("array2 = ");
     System.out.print(arr2(0) + " ");
     System.out.println(arr2(1) + " ");

     // it runs the GarbageCollector
     System.gc();
     System.out.println("Cleanup completed...");
   }
}

Wenn Sie sich das obige Beispiel ansehen, besteht die Möglichkeit, dass die JVM aufgerufen wird, um den Speicher zurückzugewinnen. Es kann jedoch nicht garantiert werden, dass es zum angegebenen Zeitpunkt ausgeführt wird. Außerdem hängt es vom JVM-Implementierungsanbieter ab, der den geeigneten Zeitpunkt für den Aufruf der Garbage Collection wählt. Die Java-Sprachspezifikation garantiert nicht, dass die JVM bei Ihrem Aufruf einen GC startet System.gc(). Dies ist der Grund dafür, dass „zu diesem Zeitpunkt möglicherweise entschieden wird, einen GC durchzuführen, oder auch nicht“.

Nun, wenn Sie es sich ansehen OpenJDK-Quellcodedas Rückgrat von Oracle JVM, sehen Sie, dass es sich um einen Aufruf von handelt System.gc() startet einen GC-Zyklus. Wenn Sie eine andere JVM wie J9 verwenden, müssen Sie deren Dokumentation überprüfen, um die Antwort herauszufinden. Die JVM von Azul verfügt beispielsweise über einen Garbage Collector, der kontinuierlich läuft, also ein Aufruf an System.gc() wird nichts tun

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen