RFR: 6478546: FileInputStream.read() throws OutOfMemoryError when there is plenty available [v8]

Brian Burkhalter bpb at openjdk.org
Fri Aug 26 22:20:29 UTC 2022


On Wed, 3 Aug 2022 17:14:13 GMT, Brian Burkhalter <bpb at openjdk.org> wrote:

>> Modify native multi-byte read-write code used by the `java.io` classes to limit the size of the allocated native buffer thereby decreasing off-heap memory footprint and increasing throughput.
>
> Brian Burkhalter has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 14 additional commits since the last revision:
> 
>  - 6478546: Eliminate a subtraction from RandomAccessFile.bufferSize()
>  - Merge
>  - 6478546: Miscellaneous cleanup
>  - Merge
>  - Merge
>  - 6478546: Use dynamically sized temporary direct buffers
>  - Merge
>  - Merge
>  - 6478546: Add break in write loop on ExceptionOccurred
>  - Merge
>  - ... and 4 more: https://git.openjdk.org/jdk/compare/50a06466...9d7e4fbf

Using the temporary direct buffer cache to provide intermediate native memory is not a good solution as direct memory may be limited. Hence the patch is reverted to its prior state, modified to move parameter checking up to the Java layer, and simplified to keep `Blocker` use to within the `readBytes` and `writeBytes` methods. This patch uses less memory and has generally higher throughput than the master branch. Sample benchmark measurements on macOS are as follows:



   RandomAccessFile::read(byte[])

                   ops / sec
    length      master       patch
     16384  468119.718  501174.185
     32768  328305.094  353844.578
    262144   48575.747   52739.050
   1048576   13176.250   13723.486
  10485760     378.469     596.246
 251503002      10.554      20.784
 524288000       5.095      10.014
1000000000       1.743       5.254


   RandomAccessFile::write(byte[])

                   ops / sec
    length      master       patch
     16384  328584.712  353691.078
     32768  252836.010  276133.188
    262144   46072.526   38558.946
   1048576   12908.426    9716.200
  10485760     194.396     498.384
 251503002       7.649      18.175
 524288000       3.643       8.524
1000000000       1.202       4.491

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

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


More information about the core-libs-dev mailing list