RFR: 8265891: ChannelInputStream.transferTo() uses FileChannel.transferTo(FileChannel)

pirateskipper github.com+77050469+pirateskipper at openjdk.java.net
Tue Aug 24 09:41:24 UTC 2021


On Sat, 21 Aug 2021 14:33:43 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).

test/jdk/sun/nio/ch/ChannelInputStream/TransferTo.java line 181:

> 179: 
> 180:     public static <T extends Throwable> void assertThrows(Thrower thrower, Class<T> throwable, String message) {
> 181:         Throwable thrown;

` Throwable thrown = null;
        try {
            thrower.run();`

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

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


More information about the nio-dev mailing list