RFR JDK-8172921: Zip filesystem performance improvement and code cleanup

Andrej Golovnin andrej.golovnin at gmail.com
Wed Jan 18 21:16:25 UTC 2017


Hi Sherman,

thanks for the update. It looks much better now.
One more thing:

src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipCoder.java

70     private static ZipCoder utf8 = new UTF8();

I think this field can be final as it never changes.

Best regards,
Andrej Golovnin

> On 18 Jan 2017, at 19:43, Xueming Shen <xueming.shen at oracle.com> wrote:
> 
> Hi Andrej,
> 
> Thanks for the review.
> 
> I was debating with myself if it's really a good idea to "silently" go with the
> default charset in case the specified charset can not be obtained. Given the
> charset name is passed via the env map, it might be better to simply let the
> runtime exception  get thrown to communicate to the caller that the encoding
> property is wrong.
> 
> The webrev has been updated accordingly.
> 
> Sherman
> 
> On 01/17/2017 11:56 PM, Andrej Golovnin wrote:
>> Hi Sherman,
>> 
>> src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipCoder.java
>> 
>>   72     public static ZipCoder get(String csn) {
>>   73         try {
>>   74         Charset cs = Charset.forName(csn);
>>   75         if (cs.name().equals("UTF-8")) {
>>   76             return utf8;
>>   77         }
>>   78         return new ZipCoder(cs);
>>   79         } catch (Throwable t) {
>>   80         t.printStackTrace();
>>   81         }
>>   82         return new ZipCoder(Charset.defaultCharset());
>>   83     }
>> 
>> Wouldn't it be better to use System.Logger instead of printStackTrace
>> in the line 80?
>> 
>> Best regards,
>> Andrej Golovnin
>> 
>> On Tue, Jan 17, 2017 at 11:39 PM, Xueming Shen<xueming.shen at oracle.com>  wrote:
>>> Hi,
>>> 
>>> Please review the following changes for zipfs implementation.
>>> 
>>> issue: https://bugs.openjdk.java.net/browse/JDK-8172921
>>> webrev: http://cr.openjdk.java.net/~sherman/8172921/webrev/
>>> 
>>> 
>>> javac has moved to use zipfs (instead of ZipFile) to access jar files in
>>> jdk9. Here are
>>> some changes to improve the performance of access time and footprint (reduce
>>> the
>>> unnecessary object allocation ...) The improvement has been measured by the
>>> jmh
>>> benchmark test as
>>> 
>>> http://cr.openjdk.java.net/~sherman/8172921/MyBenchmark.java
>>> 
>>> with the benchmark sores (before-OLD/after-NEW) at:
>>> 
>>> http://cr.openjdk.java.net/~sherman/8172921/scores
>>> 
>>> 
>>> The main change is to change the internal directory path representation from
>>> the
>>> zip specific format (directory name ends with "/", "/dir/" for directory
>>> ".dir" for
>>> example) to the "normalized" form with the tailing "/", which reduces the
>>> back and
>>> forth  conversion between the normal "unix style" path and the "zip style"
>>> path when
>>> doing path creation, path lookup and entry access, which also simplified the
>>> entry
>>> lookup logic.
>>> 
>>> We are seeing pretty good performance improvement.
>>> 
>>> There is another change, which involves the API change, for the
>>> "non-existing" path
>>> look up (which shows pretty bad numbers as ZFS_ExistsNG"), is not included
>>> in this
>>> patch. I hope we can address that as well in jdk9, but probably in another
>>> patch.
>>> 
>>> Thanks,
>>> Sherman
>>> 
>>> 
> 



More information about the core-libs-dev mailing list