termination

___ tag123garbagecollection ___ Garbage Collection (GC) ist eine Form der automatischen Speicherverwaltung, die versucht, Speichermüll oder Speicher zurückzugewinnen, die von Objekten belegt sind, die nicht mehr vom Programm verwendet werden. ___ tag123jvm ___ Die Java Virtual Machine (JVM) ermöglicht einer Reihe von Computersoftwareprogrammen und Datenstrukturen, ein virtuelles Maschinenmodell für die Ausführung anderer Computerprogramme und Skripts zu verwenden. Verwenden Sie dieses Tag für Fragen zu Tools, die von einer JVM bereitgestellt werden, oder zur Funktionsweise in einem bestimmten Szenario. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer18073090 ___

Für einige Zeit gab es eine Methode %code% , die mit dem Argument %code% aufgerufen werden konnte, um sicherzustellen, dass alle Objekte abgeschlossen waren, bevor die VM heruntergefahren wurde. Diese Methode wird nun aus Gründen abgelehnt, die in der Java-Dokumentation unter Ссылка ganz unten auf der Seite. Dies ist der relevante Abschnitt:

  

Warum ist %code% veraltet?

     

Weil es von Natur aus unsicher ist. Es kann dazu führen, dass Finalizer auf Live-Objekten aufgerufen werden, während andere Threads diese Objekte gleichzeitig manipulieren, was zu fehlerhaftem Verhalten oder Deadlock führt. Obwohl dieses Problem verhindert werden könnte, wenn die Klasse, deren Objekte gerade finalisiert werden, codiert wurde, um sich gegen diesen Aufruf "zu verteidigen", wehren sich die meisten Programmierer nicht dagegen. Sie nehmen an, dass ein Objekt zu dem Zeitpunkt tot ist, an dem sein Finalizer aufgerufen wird.

     

Außerdem ist der Aufruf nicht "Thread-sicher" in dem Sinne, dass er ein VM-Global-Flag setzt. Dies zwingt jede Klasse mit einem   Finalizer zum Schutz gegen die Finalisierung von Live-Objekten!

Nun, da diese Methode veraltet ist, gibt es keinerlei Möglichkeit, die Fertigstellung des Objekts zu garantieren. Ob und wann ein Objekt auf Müll gesammelt wird, liegt völlig an der JVM.

    
___ tag123terminierung ___ hilf uns dieses Wiki zu bearbeiten ___ qstnhdr ___ Werden Finalizer (und ReferenceQueues) bei JVM-Beendigung ausgeführt? [Duplikat] ___ qstntxt ___
    

Diese Frage hat hier schon eine Antwort:

    

Ich weiß Sie können nicht auf Finalizer zählen , um sauber zu machen Ihr Chaos (dh freie Ressourcen), aber ich frage mich - erhalten Java-Objekte GC / beendet, wenn die JVM normalerweise endet ( %code% / keine Threads übrig)?

BEARBEITEN:

Es wird also nicht garantiert, dass der GC ausgelöst wird, also auch %code% , aber funktioniert ReferenceQueue?

    
___
7
Antworten

Programmabbruch erkennen (C, Windows)

Ich habe ein Programm, das bestimmte Aufgaben ausführen muss, bevor es beendet wird. Das Problem ist, dass manchmal das Programm mit einer Ausnahme abstürzt (wie die Datenbank nicht erreichbar ist, usw.). Gibt es nun eine Möglichkeit, eine abnor...
08.09.2009, 14:09
1
Antwort

Werden Finalizer (und ReferenceQueues) bei JVM-Beendigung ausgeführt? [Duplikat]

     Diese Frage hat hier schon eine Antwort:                   Ruft JVM / GC 'finalize ()' beim Programm / Thread-Exit auf?                                      2 Antworten                                Ich weiß Sie können nicht...
06.08.2013, 06:18