RFR: 8340887: Add micro benchmark comparing input stream performance of ZipFile vs ZipInputStream [v2]
Eirik Bjørsnøs
eirbjo at openjdk.org
Sat Oct 5 17:15:59 UTC 2024
> Please review this test-only PR which adds a micro benchmark exploring performance differences between reading entry data sequentially from a `ZipFile` and reading the same entries using `ZipInputStream` wrapping a `BufferedInputStream`.
>
> Spoiler alert: `ZipFile` streams are ~1.8 X slower on my machine compared to `ZipInputStream`:
>
>
> Benchmark (buffered) (method) (size) Mode Cnt Score Error Units
> ReadZipStreams.zipFile true DEFLATED 1024 avgt 15 7871.679 ? 278.719 us/op
> ReadZipStreams.zipFile true STORED 1024 avgt 15 4976.571 ? 87.311 us/op
> ReadZipStreams.zipInputStream true DEFLATED 1024 avgt 15 4345.494 ? 40.628 us/op
> ReadZipStreams.zipInputStream true STORED 1024 avgt 15 2652.063 ? 13.617 us/op
>
>
> When not using `BufferedInputStream`, most of the difference disappears, so this is probably related to `ZipFileInputStream`'s lack of buffering:
>
>
> ReadZipStreams.zipFile false DEFLATED 1024 avgt 15 7980.705 ? 490.846 us/op
> ReadZipStreams.zipFile false STORED 1024 avgt 15 4994.301 ? 52.762 us/op
> ReadZipStreams.zipInputStream false DEFLATED 1024 avgt 15 8367.171 ? 81.631 us/op
> ReadZipStreams.zipInputStream false STORED 1024 avgt 15 4811.824 ? 47.859 us/op
Eirik Bjørsnøs 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 three additional commits since the last revision:
- Reduce benchmark allocation during reads by not using InputStream::transferTo. Usee data with a more representative compression rate.
- Merge branch 'master' into zipstream-read-benchmark
- Add micro benchmark comparing input stream performance of ZipFile vs ZipInputStream
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/21178/files
- new: https://git.openjdk.org/jdk/pull/21178/files/fc0f8c7b..0f1e873b
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=21178&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=21178&range=00-01
Stats: 173659 lines in 1069 files changed: 163363 ins; 5158 del; 5138 mod
Patch: https://git.openjdk.org/jdk/pull/21178.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/21178/head:pull/21178
PR: https://git.openjdk.org/jdk/pull/21178
More information about the core-libs-dev
mailing list