RFR: 8265448: (zipfs): Reduce read contention in ZipFileSystem

Alan Bateman alanb at openjdk.java.net
Tue May 4 14:13:51 UTC 2021


On Tue, 4 May 2021 13:07:34 GMT, Jason Zaugg <jzaugg at openjdk.org> wrote:

> If the given Path represents a file, use the overload of read defined
> in FileChannel that accepts an explicit position and avoid serializing
> reads.
> 
> Note: The underlying NIO implementation is not required to implement
> FileChannel.read(ByteBuffer, long) concurrently; Windows still appears
> to lock, as it returns true for NativeDispatcher.needsPositionLock.
> 
> 
> On MacOS X, the enclosed benchmark improves from:
> 
> 
> Benchmark                    Mode  Cnt   Score   Error  Units
> ZipFileSystemBenchmark.read  avgt   10  75.311 ? 3.301  ms/op
> 
> 
> To:
> 
> 
> Benchmark                    Mode  Cnt   Score   Error  Units
> ZipFileSystemBenchmark.read  avgt   10  12.520 ? 0.875  ms/op

src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java line 2223:

> 2221:                 synchronized (zfch) {
> 2222:                     n = zfch.position(pos).read(bb);
> 2223:                 }

@LanceAndersen Are you planning to look at this? Do you mind checking the async close case to make sure that the synchronization isn't masking anything?

Also just to point out that pattern matching for instanceof ca be used here.

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

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


More information about the core-libs-dev mailing list