Comments & opinions from core-libs, please ?

Laurent

---------- Message transféré ----------
De : "Thomas Schatzl" <thomas.scha...@oracle.com>
Date : 11 févr. 2014 11:28
Objet : Re: Fwd: Improve large array allocation / gc & intrinsics
À : "Laurent Bourgès" <bourges.laur...@gmail.com>
Cc : <hotspot-...@openjdk.java.net>

> Hi,
>
>   just a few comments...
>
> > De : "Laurent Bourgès" <bourges.laur...@gmail.com>
> > Date : 10 févr. 2014 10:24
> > Objet : Improve large array allocation / gc & intrinsics
> > À : "core-libs-dev" <core-libs-dev@openjdk.java.net>, "discuss" <
> > disc...@openjdk.java.net>
> > Cc :
> >
> > > Dear all,
> > >
> > > I would like to propose a JDK9 RFE to improve JVM efficiency when
> > > dealing with large arrays (allocation + gc).
> > >
> > > In several scientific applications (and my patched java2d pisces),
> > > many large arrays are needed, created on the fly and it becomes very
> > > painful to recycle them using an efficient array cache (concurrency,
> > > cache size tuning, clear + cache eviction issues).
>
> Why do you think that a one-size fits all approach that any library in
> the JDK will not have the same issues to deal with? How do you know that
> a generic library in the JDK (as in your proposal) or hacking things
> into the VM can deal with this problem better than you who knows the
> application allocation patterns?
>
> Do you have a prototype (library) for that?
>
> > > In this case, the GC overhead leads to a big performance penalty
> > > (several hundred megabytes per seconds).
>
> I do not understand what the problem is. Typically I would not specify
> performance (throughput?) penalty in megabytes per seconds.
>
> Do the GCs take too long, or do you feel there too much memory wastage
> somewhere?
>
> > > As such array cache are very efficient in an application context, I am
> > > wondering if that approach could be promoted at the JDK level itself:
> > >
> > > - provide a new array allocator for large arrays that can return
> > > larger arrays than expected (size = 4 or 8 multiples) using array
> > > caches (per thread ?) stored in a dedicated JVM large memory area
>
> The behavior you propose seems very particular to your application.
> Others may have completely different requirements. The mentioned
> per-thread caches do not seem to be problematic to do in a library
> either.
>
> > > (GC aware) and providing efficient cache eviction policies
>
> Did you every try one of the other available garbage collectors with
> your application? Both CMS and G1 never move large objects around, i.e.
> there is almost no direct GC overhead associated with them.
>
> Reclaiming them is almost zero cost in these collectors. Keeping them
> alive seems to be best handled by logic in a library.
>
> Can you give examples where the VM has significant advantages over a
> dedicated library, or a particular use case with measurements that show
> this could be the case?
>
> > > - may support for both clean arrays (zero filled) or dirty arrays
> > > because some algorithms does not need zero-filled arrays.
> > >
> > > - improve JVM intrinsics (array clear, fill) to achieve maximum
> > > performance ie take into account the data alignment (4 or 8 multiples)
>
> I think the compiler already uses specialized methods for that, using
> the "best" instructions that are available. It should also already be
> able to detect "fill" loops, and vectorize them.
>
> Objects are always 8 byte aligned - I think you can force higher
> alignments by setting ObjectAlignmentInBytes or so.
>
> Otherwise these changes could be simply added, i.e. seems to not need
> any RFE.
>
> > > - upgrade GC to recycle such 'cached' arrays (clean), update usage
> > > statistics and manage cache eviction policy (avoid wasting memory)
>
> The GCs already automatically recycle the freed space. Everything else
> seems to be more complicated to implement at VM level than at library
> level, with the added drawback that you add a VM dependency.
>
> > > Please give me your feedback & opinion and evaluate if this feature
> > > seems possible to implement into the JDK (hotspot, gc, core-libs)...
>
> Thanks,
> Thomas
>
>

Reply via email to