Abschluss von Strongly Reachable Objects in Java 8
Das Upgrade von Java 7 auf Java 8 kann gelegentlich zu einer Ausnahme führen, die darauf hinweist, dass der Stream während Lesevorgängen geschlossen wird. Dies wird dadurch verursacht, dass der Finalisierungsthread finalize() für das Objekt aufruft, das den Stream enthält, und ihn anschließend schließt.
Unter Berücksichtigung des bereitgestellten Codes ruft die finalize()-Methode in HTTPMessage, erweitert durch MIMEBodyPart, close() auf, was Schließt den zugehörigen Stream. Während der Ausführung von MIMEWriter.writePart() liest IOUtils.copy Blöcke aus dem Eingabestream bis zur Erschöpfung.
Das Problem tritt auf, wenn HTTPMessage.finalize() ausgeführt wird, während IOUtils.copy ausgeführt wird, was dazu führt, dass der Stream geschlossen wird Ausnahme. Während das MIMEBodyPart-Objekt vom Stapelrahmen aus erreichbar ist, ruft die JVM finalize() auf. Dieses Verhalten ist verwirrend.
Mögliche Erklärung
Selbst mit Verweisen auf Objekte in lokalen Stack-Variablen und aktiven Methodenaufrufen können Objekte finalisiert und durch Müll gesammelt werden, wenn sie als „nicht erreichbar“ gelten ." Damit ein Objekt nicht erreichbar ist, interagiert kein nachfolgender Code mit seiner Referenz.
In diesem speziellen Fall kann das MimeBodyPart-Objekt in einer lokalen Variablen gespeichert werden. Da kein nachfolgender Code in IOUtils.copy auf das MimeBodyPart-Objekt verweist, hält die JVM es möglicherweise für nicht erreichbar, was seine Finalisierung auslöst.
Beispiele und Codeänderungen
Ein Beispiel wird bereitgestellt um zu demonstrieren, wie Objekte während aktiver Methodenaufrufe finalisiert werden können, auch mit Referenzen auf Stapel.
Darüber hinaus wird die Finalisierung beobachtet, indem der Code so geändert wird, dass er einen Verweis auf das FinalizeThis-Objekt in einem Feld anstelle einer lokalen Variablen enthält.
Schlussfolgerung
Es wird empfohlen, die Verwendung von finalize() zu vermeiden, da Best Practices dies vorschreiben. Unter bestimmten Umständen ist es jedoch möglich, dass Java 8 erreichbare Objekte finalisiert. Dies sollte bei der Überprüfung des Codes und der Fehlerbehebung bei Ausnahmen im Zusammenhang mit der Objektfinalisierung berücksichtigt werden.
Das obige ist der detaillierte Inhalt vonWarum werden stark erreichbare Java-Objekte in Java 8 finalisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

JVM'SPERFORMANCEISCORTITITIONWITHOTHOTHERRUNTIMEN, OPFORMENTABALANCEFEED, Sicherheit und Produktivität.1) JVmusesjitCompilationfordynamicoptimierungen.2)

JavaachievsplattformIndependencethroughthejavavirtualMachine (JVM), Zulassung von CodetorunonanyPlatformWithajvm.1) codiscompiledIntobytecode, NotMachine-spezifischCode.2) bytecodeIsinterpreted bythejvm, ermöglicht, zu ermöglichen

ThejvmisanabstractComputingMachinecrucialForrunningjavaprogramsduToitSplatform-unabhängige Architektur.itincludes: 1) ClassloaderforFoLoading-Klassen, 2) Runtimedataardeatastorage, 3) ExeclectueNeginewitherdinterpreter, Jitcompiler, undgarbaglector

JvmhasaclosereLationship withtheosasittranslatesjavabyteCodeIntomachine-spezifische Struktur, ManagesMemory und HandlesGAGAGECollection

Die Java -Implementierung "einmal schreiben, überall rennen" wird in Bytecode zusammengestellt und auf einer Java Virtual Machine (JVM) ausgeführt. 1) Schreiben Sie Java -Code und kompilieren Sie ihn in Bytecode. 2) Bytecode läuft auf einer beliebigen Plattform, wobei JVM installiert ist. 3) Verwenden Sie die Java Native Interface (JNI), um plattformspezifische Funktionen zu verarbeiten. Trotz Herausforderungen wie JVM-Konsistenz und der Verwendung von plattformspezifischen Bibliotheken verbessert Wora die Entwicklungseffizienz und die Flexibilität der Bereitstellung erheblich.

JavaachievesplattformIndependencethroughthejavavirtualMachine (JVM), die Codetorunondifferentoperatingsystems mit der Modifizierung von TheJVMCompilesjavacodeIntoplatform-inindivespendentBytecode, abgerechnet, abtrakt, abtret, abtrakt,

JavaispowerfulDuetoitsplattformindependenz, objektorientierteNature, Richstandardlibrary, PerformanceCapabilities, andstrongSecurityFeatures.1) PlattformindependenceAllowsApplicationStorunonanyDevicesupportingjava)

Zu den Top-Java-Funktionen gehören: 1) objektorientierte Programmierung, Unterstützung von Polymorphismus, Verbesserung der Code-Flexibilität und -wartbarkeit; 2) Ausnahmebehörigkeitsmechanismus, Verbesserung der Code-Robustheit durch Try-Catch-finaler Blöcke; 3) Müllsammlung, Vereinfachung des Speichermanagements; 4) Generika, Verbesserung der Art Sicherheit; 5) ABBDA -Ausdrücke und funktionale Programmierung, um den Code prägnanter und ausdrucksstärker zu gestalten; 6) Reiche Standardbibliotheken, die optimierte Datenstrukturen und Algorithmen bereitstellen.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung
