RFR: 8264777: Overload optimized FileInputStream::readAllBytes [v2]
Brian Burkhalter
bpb at openjdk.java.net
Tue May 4 20:18:25 UTC 2021
> Please consider this request to override the `java.io.InputStream` methods `readAllBytes()` and `readNBytes(int)` in `FileInputStream` with more performant implementations. The method overrides attempt to read all requested bytes into a single array of the required size rather than composing the result from a sequence of smaller arrays. An example of the performance improvements is as follows.
>
> **readAllBytes**
> Before
>
> Benchmark (length) Mode Cnt Score Error Units
> ReadAllBytes.readAllBytesFileInputStream 1000000 thrpt 20 2412.031 ± 7.309 ops/s
> ReadAllBytes.readAllBytesFileInputStream 10000000 thrpt 20 212.181 ± 0.369 ops/s
> ReadAllBytes.readAllBytesFileInputStream 100000000 thrpt 20 19.860 ± 0.048 ops/s
> ReadAllBytes.readAllBytesFileInputStream 1000000000 thrpt 20 1.298 ± 0.183 ops/s
>
> After
>
> Benchmark (length) Mode Cnt Score Error Units
> ReadAllBytes.readAllBytesFileInputStream 1000000 thrpt 20 8218.473 ± 43.425 ops/s
> ReadAllBytes.readAllBytesFileInputStream 10000000 thrpt 20 302.781 ± 1.273 ops/s
> ReadAllBytes.readAllBytesFileInputStream 100000000 thrpt 20 22.461 ± 0.084 ops/s
> ReadAllBytes.readAllBytesFileInputStream 1000000000 thrpt 20 1.502 ± 0.003 ops/s
>
>
> **readNBytes**
>
> `N = file_size / 2`
>
> Before
>
> Benchmark (length) Mode Cnt Score Error Units
> ReadAllBytes.readHalfBytesFileInputStream 1000000 thrpt 20 5585.500 ± 153.353 ops/s
> ReadAllBytes.readHalfBytesFileInputStream 10000000 thrpt 20 436.164 ± 1.104 ops/s
> ReadAllBytes.readHalfBytesFileInputStream 100000000 thrpt 20 40.167 ± 0.141 ops/s
> ReadAllBytes.readHalfBytesFileInputStream 1000000000 thrpt 20 3.291 ± 0.211 ops/s
>
>
> After
>
> Benchmark (length) Mode Cnt Score Error Units
> ReadAllBytes.readHalfBytesFileInputStream 1000000 thrpt 20 15463.210 ± 66.045 ops/s
> ReadAllBytes.readHalfBytesFileInputStream 10000000 thrpt 20 561.752 ± 0.951 ops/s
> ReadAllBytes.readHalfBytesFileInputStream 100000000 thrpt 20 45.043 ± 0.102 ops/s
> ReadAllBytes.readHalfBytesFileInputStream 1000000000 thrpt 20 4.629 ± 0.035 ops/s
Brian Burkhalter has updated the pull request incrementally with one additional commit since the last revision:
8264777: Handle cases where length() returns zero
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/3845/files
- new: https://git.openjdk.java.net/jdk/pull/3845/files/8b568686..98a03a55
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3845&range=01
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3845&range=00-01
Stats: 25 lines in 1 file changed: 16 ins; 2 del; 7 mod
Patch: https://git.openjdk.java.net/jdk/pull/3845.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3845/head:pull/3845
PR: https://git.openjdk.java.net/jdk/pull/3845
More information about the core-libs-dev
mailing list