RFR(s): 8244659: Improve ZipFile.getInputStream

Claes Redestad claes.redestad at oracle.com
Tue May 12 14:42:14 UTC 2020



On 2020-05-12 16:07, Martin Buchholz wrote:
> 
> 
> On Tue, May 12, 2020 at 6:42 AM Claes Redestad 
> <claes.redestad at oracle.com <mailto:claes.redestad at oracle.com>> wrote:
> 
>     Hi Volker,
> 
>     I think this look like a nice improvement!
> 
>     One high-level concern I have with the design is that this will add and
>     retain (at least) one 64k buffer to each Jar-/ZipFile we've read a
>     stream from. We routinely see apps reading classes from 100s of jar
>     files on their class path, so this could add noticeable overhead to the
>     baseline retained memory usage of such applications.
> 
> 
> At Google, it's common to run java applications with 10,000 small jar 
> files on the classpath.

Ouch! That could mean a 600Mb+ footprint increase. Not very nice.

> Making the "quiescent cost" of each ZipFile object as small as possible 
> is important.
> OTOH we currently retain the byte[] of the zip file central directory 
> indefinitely.

Striking the right trade-off is hard - and footprint has often gotten
the shortest stick.

> 
> 
>     Have you considered other strategies such as making the cache global?
>     Since a (the?) common usage pattern is likely a single thread repeatedly
>     reading resources from a series of jar files, contention on such a
>     global cache is likely going to be very low, while likely reducing the
>     total number of buffers we have to allocate and retain to single-digit
>     numbers. I don't insist on a re-design, but it shouldn't be hard to
>     prototype and run some numbers on it.
> 
> 
> Java resource management is still hard!

... but fun?!

/Claes


More information about the core-libs-dev mailing list