Integrated: 8374377: PNGImageDecoder Slow For 8-bit PNGs

Jeremy Wood jwood at openjdk.org
Fri Jan 9 09:59:11 UTC 2026


On Sun, 28 Dec 2025 02:22:16 GMT, Jeremy Wood <jwood at openjdk.org> wrote:

> When decoding an uninterlaced 8-bit PNG image, the PNGImageDecoder is basically copying one byte at a time.
> 
> This PR uses System.arraycopy instead, and it shows approx a 10% improvement.
> 
> This graph shows the time it takes different decoders to convert a byte array into a BufferedImage as the size of the PNG image increases:
> 
> <img width="596" height="366" alt="Screenshot 2025-12-27 at 9 14 19 PM" src="https://github.com/user-attachments/assets/73583cb2-eda0-47a8-b818-735a1835f1e8" />
> 
> (This originally came to my attention when looking at an image in Java 1.8. There the ImageConsumer model took approx 400% longer than ImageIO. I was happy to see in recent JDKs that gap narrowed significantly, but there was still a noticeable 10% discrepancy.)
> 
> I haven't tried submitting a performance enhancement PR before; I'm not sure if this issue meets this group's threshold for being worth addressing. And if it does: I'm not sure how to structure a unit test for it.

This pull request has now been integrated.

Changeset: 2a965dff
Author:    Jeremy Wood <jwood at openjdk.org>
Committer: Jayathirth D V <jdv at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/2a965dffdd2791ab87a2dbfba8ed44f8adb996c7
Stats:     400 lines in 3 files changed: 396 ins; 0 del; 4 mod

8374377: PNGImageDecoder Slow For 8-bit PNGs

Reviewed-by: jdv, prr

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

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


More information about the client-libs-dev mailing list