Menü
Developer

Oracle möchte sich endgültig von Object.finalize verabschieden

Die Methode existiert sei Java 1.0, führt aber zu Problemen für Performance und Stabilität. In Java 9 werden die Finalizers jedoch höchstens eine Warnung verursachen und wohl frühestens in Java 11 endgültig Geschichte sein.

vorlesen Drucken Kommentare lesen 2 Beiträge

Offensichtlich gibt es im OpenJDK-Team ernsthafte Pläne, Object.finalize für überholt (deprecated) zu erklären. Die seit Java 1.0 enthaltenen Finalizers sind für Aufräummaßnahmen vorgesehen: Der Garbage Collector ruft sie auf, wenn keine Referenz mehr zum betreffenden Objekt existiert. In der Praxis sind sie jedoch nicht zuverlässig und für zahlreiche Probleme von Performanceverlusten bis zu Deadlocks verantwortlich. Als Ersatz sollen Entwickler lieber java.lang.ref.Cleaner und java.lang.ref.PhantomReference verwenden, die flexiblere und zuverlässigere Aufräummethoden bieten. Dazu gibt es jedoch auch Bedenken, da die Methoden nicht in allen Szenarien ein vollwertiger Ersatz seien.

Der Vorschlag JDK-8165641 existiert bereits seit September 2016 und wäre am 27. März 2017 fällig gewesen. Sollte das Team die Deprecation beschließen, wird das kommende Java 9 jedoch lediglich Warnungen ausgeben. Object.finalize wird wohl nicht als "deprecated for removal" erklärt, sodass es zumindest noch eine weitere Hauptversion erhalten bleibt und endgültig frühestens mit Java 11 verschwindet. (rme)