RFR: 8300236: Use VarHandle access in Data(Input | Output)Stream classes
Roger Riggs
rriggs at openjdk.org
Fri Jan 20 18:25:35 UTC 2023
On Wed, 18 Jan 2023 16:34:57 GMT, Per Minborg <pminborg at openjdk.org> wrote:
> This PR proposes using a performance optimization using a new supported API for operations similar to those found in `java.io.Bits`
src/java.base/share/classes/java/io/ObjectStreamClass.java line 2486:
> 2484: );
> 2485: } catch (NoSuchMethodException | IllegalAccessException e) {
> 2486: throw new InternalError("Can't lookup BigEndian.getXXX", e);
BigEndian -> ByteArrayAccess
src/java.base/share/classes/jdk/internal/util/access/ByteArrayAccess.java line 26:
> 24: */
> 25:
> 26: package jdk.internal.util.access;
This is pretty deep; I'd drop the final "access". The package name `jdk.internal.util` is fine.
src/java.base/share/classes/jdk/internal/util/access/ByteArrayAccess.java line 60:
> 58: /*
> 59: * Methods for unpacking primitive values from byte arrays starting at
> 60: * a given offsets.
Typo: "a given offsets".
src/java.base/share/classes/jdk/internal/util/access/ByteArrayAccess.java line 64:
> 62:
> 63: /**
> 64: * Gets a {@code boolean} from the provided {@code array} at the given {@code offset}.
This could use the concise javadoc tag that provides both the first line and @return value. For example,
`{@return Returns a {@code boolean} from the provided {@code array} at the given {@code offset}}`
src/java.base/share/classes/jdk/internal/util/access/ByteArrayAccess.java line 69:
> 67: * @param offset where extraction in the array should begin
> 68: * @return a {@code boolean} from the array
> 69: * @throws NullPointerException if the provided {@code array} is {@code null}
With the class level statement about throwing NullPointer, the @throws is not necessary in each method.
src/java.base/share/classes/jdk/internal/util/access/ByteArrayAccess.java line 614:
> 612: /*
> 613: * Methods for packing primitive values into byte arrays starting at offset zero.
> 614: */
Is the only advantage to the zero offset versions in the API.
Is there any performance difference?
-------------
PR: https://git.openjdk.org/jdk/pull/12076
More information about the core-libs-dev
mailing list