RFR: 8265891: (ch) InputStream returned by Channels.newInputStream should override transferTo

Alan Bateman alanb at openjdk.java.net
Mon Jun 28 07:55:08 UTC 2021


On Sun, 30 May 2021 17:30:56 GMT, Markus KARG <github.com+1701815+mkarg at openjdk.org> wrote:

> This PR-*draft* is **work in progress** and an invitation to discuss a possible solution for issue [JDK-8265891](https://bugs.openjdk.java.net/browse/JDK-8265891). It is *not yet* intended for a final review.
> 
> As proposed in JDK-8265891, this PR provides an implementation for `Channels.newInputStream().transferTo()` which provide superior performance compared to the current implementation. The changes are:
> * Prevents transfers through the JVM heap as much as possibly by offloading to deeper levels via NIO, hence allowing the operating system to optimize the transfer.
> * Using more JRE heap in the fallback case when no NIO is possible (still only KiBs, hence mostl ynegligible even on SBCs) to better perform on modern hardware / fast I/O devides.
> 
> Using JMH I have benchmarked both, the original implementation and this implementation, and (depending on the used hardware and use case) performance change was approx. doubled performance. So this PoC proofs that it makes sense to finalize this work and turn it into an actual OpenJDK contribution. 
> 
> I encourage everybody to discuss this draft:
> * Are there valid arguments for *not* doing this change?
> * Is there a *better* way to improve performance of `Channels.newInputStream().transferTo()`?
> * How to go on from here: What is missing to get this ready for an actual review?

> I am a bit lost currently. So what actually do I have to do next? You want _me_ to write these tests, or shall I just refactor my implementation and _you_ will provide these tests (I would prefer that, actually)?

The existing test for InputStream.transferTo mostly exercises the default implementation. There are overrides in other input stream implementation but the test coverage appears to be spotty. This PR adds an overwrite with four implementations and it doesn't appear that these are exercised by any tests. So yes, tests are needed. This PR, or another PR that is integrated in advance, either is fine.

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

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


More information about the nio-dev mailing list