RFR: 8300235: Use VarHandle access in Image(Input | Output)StreamImpl classes

Per Minborg pminborg at openjdk.org
Thu Jan 26 09:00:34 UTC 2023


On Wed, 25 Jan 2023 16:39:04 GMT, Per Minborg <pminborg at openjdk.org> wrote:

> This PR suggests improving performance by using the newly introduced class `jdk.internal.util.ByteArray` to improve packing/unpacking operations.
> 
> The PR also proposes adding a `ByteArrayLittleEndian` class for support for little endian packing/unpacking.

Here are some performance figures (TLDR: about 2% performance increase):

Baseline (J21 master)

     [java] All test results:
     [java] Test(imageio.input.stream.tests.readFully(int[])) averaged 2.0089243986475606E9 bytes/sec
     [java]     with 250x250, photo, byteArray, !useCache
     [java] Test(imageio.input.stream.tests.readLong) averaged 6.087925258517034E8 bytes/sec
     [java]     with 250x250, photo, byteArray, !useCache


Patch

     [java] All test results:
     [java] Test(imageio.input.stream.tests.readFully(int[]) averaged 2.0537614726652384E9 bytes/sec
     [java]     with 250x250, photo, byteArray, !useCache
     [java] Test(imageio.input.stream.tests.readLong) averaged 6.227265050569915E8 bytes/sec
     [java]     with 250x250, photo, byteArray, !useCache


the `readFully(int[])` is a custom benchmark:


                iis.mark();
                int[] array = new int[8];
                do {
                    if (pos + 4*8 > length) {
                        iis.reset();
                        iis.mark();
                        pos = 0;
                    }
                    iis.readFully(array, 0, 8);
                    pos += 4*8;
                } while (--numReps >= 0);


Tests were run on a Mac M1 aarch64 machine.

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

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


More information about the core-libs-dev mailing list