RFR: JDK-8189611: JarFile versioned stream and real name support

Xueming Shen xueming.shen at oracle.com
Fri Nov 17 18:54:59 UTC 2017


On 11/17/2017 08:53 AM, Xueming Shen wrote:
>>
>> 3. Is ZipFile.entryNameStream really needed? Just asking because zf.stream().map(ZipEntry::getName) is possible today.
>>
> It's not a "must" for sure. The motivation behind this is that my observation of most normal use scenario
> inside JDK is that only the "name" info is interested/collect/used. The use pattern usually is
>
> zf.stream().map(ZipEntry::getName)
>
> same for the old Enumeration case, only the "name" is used and the "entry" object is thrown away mostly.
>
> Other than the memory consumption (showed in those two snapshots), it's also relatively costly to create
> the ZipEntry especially its "esxdostime" calculation. The jmh numbers from a simple benchmark test
> suggests the entryNameStream is about 15-20% faster. So, the only reason it's there is for better
> performance. And hope it might be useful/convenient for the end user as well. If it's a concern, I can
> hide it into the SharedSecrets, or simply use the zf.stream().map(ZipEntry::getName) instead.
>
> --------------------------------------
> JarFileBenchmark.jf_entries          avgt   20  0.871 ± 0.079  ms/op
> JarFileBenchmark.jf_entryNameStream  avgt   20  0.786 ± 0.165  ms/op
> JarFileBenchmark.jf_getEntry         avgt   20  6.805 ± 0.615  ms/op
> JarFileBenchmark.jf_stream           avgt   20  0.915 ± 0.096  ms/op
> JarFileBenchmark.jf_versionedStream  avgt   20  9.412 ± 0.642  ms/op
> JarFileBenchmark.zf_entries          avgt   20  0.877 ± 0.092  ms/op
> JarFileBenchmark.zf_entryNameStream  avgt   20  0.730 ± 0.123  ms/op
> JarFileBenchmark.zf_getEntry         avgt   20  1.805 ± 0.177  ms/op
> JarFileBenchmark.zf_stream           avgt   20  0.926 ± 0.167  ms/op
> ---------------------------------------

above is the numbers from a mr-jar file. here is the numbers for a normal jar.
similar difference.

# Run complete. Total time: 00:06:10

Benchmark                            Mode  Cnt  Score   Error  Units
JarFileBenchmark.jf_entries          avgt   20  0.857 ± 0.075  ms/op
JarFileBenchmark.jf_entryNameStream  avgt   20  0.691 ± 0.064  ms/op
JarFileBenchmark.jf_getEntry         avgt   20  1.868 ± 0.151  ms/op
JarFileBenchmark.jf_stream           avgt   20  0.857 ± 0.056  ms/op
JarFileBenchmark.jf_versionedStream  avgt   20  0.875 ± 0.103  ms/op
JarFileBenchmark.zf_entries          avgt   20  0.811 ± 0.061  ms/op
JarFileBenchmark.zf_entryNameStream  avgt   20  0.662 ± 0.064  ms/op
JarFileBenchmark.zf_getEntry         avgt   20  1.907 ± 0.259  ms/op
JarFileBenchmark.zf_stream           avgt   20  0.806 ± 0.075  ms/op

sherman




More information about the core-libs-dev mailing list