Re: RFR: 8264777: Overload optimized FileInputStream::readAllBytes [v8]

2021-05-17 Thread Alan Bateman
On Mon, 17 May 2021 17:00:15 GMT, Brian Burkhalter  wrote:

>> 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  100  thrpt   20   2412.031 
>> ±   7.309  ops/s
>> ReadAllBytes.readAllBytesFileInputStream 1000  thrpt   20212.181 
>> ±   0.369  ops/s
>> ReadAllBytes.readAllBytesFileInputStream1  thrpt   20 19.860 
>> ±   0.048  ops/s
>> ReadAllBytes.readAllBytesFileInputStream   10  thrpt   20  1.298 
>> ±   0.183  ops/s
>> 
>> After
>> 
>> Benchmark(length)   Mode  Cnt  Score 
>> Error  Units
>> ReadAllBytes.readAllBytesFileInputStream  100  thrpt   20   8218.473 
>> ±  43.425  ops/s
>> ReadAllBytes.readAllBytesFileInputStream 1000  thrpt   20302.781 
>> ±   1.273  ops/s
>> ReadAllBytes.readAllBytesFileInputStream1  thrpt   20 22.461 
>> ±   0.084  ops/s
>> ReadAllBytes.readAllBytesFileInputStream   10  thrpt   20  1.502 
>> ±   0.003  ops/s
>> 
>> 
>> **readNBytes**
>> 
>> `N = file_size / 2`
>> 
>> Before
>> 
>> Benchmark(length)   Mode  Cnt  Score 
>> Error  Units
>> ReadAllBytes.readHalfBytesFileInputStream 100  thrpt   20   5585.500 
>> ± 153.353  ops/s
>> ReadAllBytes.readHalfBytesFileInputStream1000  thrpt   20436.164 
>> ±   1.104  ops/s
>> ReadAllBytes.readHalfBytesFileInputStream   1  thrpt   20 40.167 
>> ±   0.141  ops/s
>> ReadAllBytes.readHalfBytesFileInputStream  10  thrpt   20  3.291 
>> ±   0.211  ops/s
>> 
>> 
>> After
>> 
>> Benchmark(length)   Mode  Cnt  Score 
>> Error  Units
>> ReadAllBytes.readHalfBytesFileInputStream 100  thrpt   20  15463.210 
>> ±  66.045  ops/s
>> ReadAllBytes.readHalfBytesFileInputStream1000  thrpt   20561.752 
>> ±   0.951  ops/s
>> ReadAllBytes.readHalfBytesFileInputStream   1  thrpt   20 45.043 
>> ±   0.102  ops/s
>> ReadAllBytes.readHalfBytesFileInputStream  10  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: Clean up test

Marked as reviewed by alanb (Reviewer).

test/jdk/java/io/FileInputStream/ReadXBytes.java line 69:

> 67: 
> 68: try (FileInputStream fis = new FileInputStream(empty)) {
> 69: byte[] b = fis.readAllBytes();

You could move this readAllBytes test up to the previous block if you want.

-

PR: https://git.openjdk.java.net/jdk/pull/3845


Re: RFR: 8264777: Overload optimized FileInputStream::readAllBytes [v8]

2021-05-17 Thread Brian Burkhalter
> 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  100  thrpt   20   2412.031 
> ±   7.309  ops/s
> ReadAllBytes.readAllBytesFileInputStream 1000  thrpt   20212.181 
> ±   0.369  ops/s
> ReadAllBytes.readAllBytesFileInputStream1  thrpt   20 19.860 
> ±   0.048  ops/s
> ReadAllBytes.readAllBytesFileInputStream   10  thrpt   20  1.298 
> ±   0.183  ops/s
> 
> After
> 
> Benchmark(length)   Mode  Cnt  Score  
>Error  Units
> ReadAllBytes.readAllBytesFileInputStream  100  thrpt   20   8218.473 
> ±  43.425  ops/s
> ReadAllBytes.readAllBytesFileInputStream 1000  thrpt   20302.781 
> ±   1.273  ops/s
> ReadAllBytes.readAllBytesFileInputStream1  thrpt   20 22.461 
> ±   0.084  ops/s
> ReadAllBytes.readAllBytesFileInputStream   10  thrpt   20  1.502 
> ±   0.003  ops/s
> 
> 
> **readNBytes**
> 
> `N = file_size / 2`
> 
> Before
> 
> Benchmark(length)   Mode  Cnt  Score  
>Error  Units
> ReadAllBytes.readHalfBytesFileInputStream 100  thrpt   20   5585.500 
> ± 153.353  ops/s
> ReadAllBytes.readHalfBytesFileInputStream1000  thrpt   20436.164 
> ±   1.104  ops/s
> ReadAllBytes.readHalfBytesFileInputStream   1  thrpt   20 40.167 
> ±   0.141  ops/s
> ReadAllBytes.readHalfBytesFileInputStream  10  thrpt   20  3.291 
> ±   0.211  ops/s
> 
> 
> After
> 
> Benchmark(length)   Mode  Cnt  Score  
>Error  Units
> ReadAllBytes.readHalfBytesFileInputStream 100  thrpt   20  15463.210 
> ±  66.045  ops/s
> ReadAllBytes.readHalfBytesFileInputStream1000  thrpt   20561.752 
> ±   0.951  ops/s
> ReadAllBytes.readHalfBytesFileInputStream   1  thrpt   20 45.043 
> ±   0.102  ops/s
> ReadAllBytes.readHalfBytesFileInputStream  10  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: Clean up test

-

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/3845/files
  - new: https://git.openjdk.java.net/jdk/pull/3845/files/4fae0209..17e21c9a

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3845&range=07
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3845&range=06-07

  Stats: 49 lines in 1 file changed: 6 ins; 3 del; 40 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