Home » Java » Core Java » Deprecating Java’s Finalizer

About Dustin Marx

Dustin Marx

Deprecating Java’s Finalizer

JDK-8165641 (“Deprecate Object.finalize”) has been opened to “deprecate Object.finalize()” because “finalizers are inherently problematic and their use can lead to performance issues, deadlocks, hangs, and other problematic behavior” and because “the timing of finalization is unpredictable with no guarantee that a finalizer will be called.” I recently experienced and wrote about some of these nasty consequences of using Object.finalize() in the post Java’s Finalizer is Still There.

In the message RFR 9: 8165641 : Deprecate Object.finalize, Roger Riggs invites review and comment on the changes associated with this issue [150 new lines that include the addition of @Deprecated to java.lang.Object.finalize() and numerous additions of @SuppressWarnings(“deprecation”) annotations on current JDK classes’ implementations of Object.finalize() methods].

The proposed addition of Javadoc @deprecated-associated text for the Object.finalize() method restates descriptive information included in JDK-8165641 and in Roger Riggs’s message. This includes the recommendations to “implement java.lang.AutoCloseable if appropriate” for “classes whose instances hold non-heap resources” and to “provide a method to enable explicit release of those resources.” The descriptive information also states, “The {@link java.lang.ref.Cleaner} and {@link java.lang.ref.PhantomReference} provide more flexible and efficient ways to release resources when an object becomes unreachable.” See JDK-8138696 for more background on JDK 9-introduced java.lang.ref.Cleaner. The deprecation of Object.finalize() includes the enhanced @Deprecated annotation to state since when the method has been deprecated [@Deprecated(since="9")].

Although the proposed deprecation of Object.finalize() won’t remove the ability to use the Java finalizer or reduce any of its potential negative consequences, it will at least provide an even more obvious warning about the risks of using that approach and, as currently documented, provides better potential alternatives to be considered.

Reference: Deprecating Java’s Finalizer from our JCG partner Dustin Marx at the Inspired by Actual Events blog.

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!

 

1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design

 

and many more ....

 

Receive Java & Developer job alerts in your Area

 

Leave a Reply

1 Comment on "Deprecating Java’s Finalizer"

Notify of
avatar
Sort by:   newest | oldest | most voted
Sam
Guest

I used to like using destructors in C++ because if I have an object where a file is opened then I could close it in a destructor. But using Java, I had to keep track of how many objects were using my file object and then close the file when there were no users left.

wpDiscuz