RFR: JDK-8273038: ChannelInputStream.transferTo() uses FileChannel.transferTo(FileChannel) [v8]
Brian Burkhalter
bpb at openjdk.java.net
Mon Aug 30 23:59:30 UTC 2021
On Mon, 30 Aug 2021 18:03:09 GMT, Markus KARG <github.com+1701815+mkarg at openjdk.org> wrote:
>> As proposed in JDK-8265891, this PR provides an implementation for `Channels.newInputStream().transferTo()` which provide superior performance compared to the current implementation. This PR is a spin-off from https://github.com/openjdk/jdk/pull/4263 and https://github.com/openjdk/jdk/pull/5179 and deliberately concentrates **only** on the case where both, source **and** target, are actually `FileChannel`s. Other types of channels will be discussed in future PRs.
>>
>> * 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 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. A rather similar approach in different use casse was recently implemented by https://github.com/openjdk/jdk/pull/5097 which was reported by even provide 5x performance (https://github.com/openjdk/jdk/pull/5097#issuecomment-897271997).
>
> Markus KARG has updated the pull request incrementally with one additional commit since the last revision:
>
> Skipping bytes instead of reading them
>
> Signed-off-by: Markus Karg <markus at headcrashing.eu>
As I understand it, if a `j.u.Random` instance is constructed from a given seed, then a series of invocations on that instance will always produce the same sequence of outputs. `RandomFactory` prints the seed in the test output and allows a seed to be provided to the test via a `-D` option. So if the test fails with a given combination of initial positions and buffer size, then it should be straightforward to reproduce the failure by providing the seed used when the test failed.
-------------
PR: https://git.openjdk.java.net/jdk/pull/5209
More information about the nio-dev
mailing list