RFR: 8277585: Remove the terminally deprecated finalize() method from javax.imageio.stream APIs

Phil Race prr at openjdk.org
Tue Aug 5 21:26:44 UTC 2025


This PR removes javax/imageio/stream/ImageInputStreamImpl.finalize()
As a result, sub-classes which over-ride it to be empty no longer need to do so.
Also it means that the 2 remaining classes which used it no longer can.
FileCacheImageOutputStream will have its cache cleaned up by a disposer.
The impact on applications is that they, or the ImageWriter may need to call flush() IF they relied on finalization.
However that should be extremely unlikely given that finalization will happen far too late in most cases, and is
really meant to clean up internal resources.
The JDK's GIF and TIFF image writers don't flush themselves, so applications which use these together with one of these caching streams would have learned this already.

The principal outside risk is to 3rd party ImageIO stream subclasses which both allocate native resources and rely on finalization as a backstop clean up in case applications forget to call close. But it will be the applications that are affected if the resource is depleted. 
The risks of this will be covered in the CSR.

There's also a lengthy write up in the JBS issue.

-------------

Commit messages:
 - 8277585
 - 8277585

Changes: https://git.openjdk.org/jdk/pull/26650/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26650&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8277585
  Stats: 276 lines in 10 files changed: 63 ins; 202 del; 11 mod
  Patch: https://git.openjdk.org/jdk/pull/26650.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26650/head:pull/26650

PR: https://git.openjdk.org/jdk/pull/26650


More information about the client-libs-dev mailing list