RFR: 8209163: SA: Show Object Histogram asserts with ZGC

Per Liden per.liden at oracle.com
Fri Sep 14 08:23:15 UTC 2018


Thanks Yasumasa and JC for looking at this. I noticed that we seem to do 
the same thing in ReversePtrsAnalysis.java, i.e. call 
heapIterationFractionUpdate(0) to get things initialized. So, let's go 
with webrev.0.

cheers,
Per

On 09/13/2018 07:31 PM, JC Beyler wrote:
> Looks like webrev.0 is the good one then :); looks good to me then Per 
> (not a reviewer though),
> Jc
> 
> On Thu, Sep 13, 2018 at 6:25 AM Yasumasa Suenaga <yasuenag at gmail.com 
> <mailto:yasuenag at gmail.com>> wrote:
> 
>     Hi Per,
> 
>     On 2018/09/13 19:48, Per Liden wrote:
>      >   Hi JC,
>      >
>      >   Thanks for reviewing.
>      >
>      >   On 09/12/2018 06:02 PM, JC Beyler wrote:
>      >   > Hi Per,
>      >   >
>      >   > I do not know this code but your need to
>      >   > call?heapIterationFractionUpdate seems to be a code smell that
>      >   > something
>      >   > else could be fixed, no?
>      >   >
>      >   > Your webrev looks fine to me if I ignore the code smell that
>     comes
>      >   > from
>      >   > having to call the update call:
>      >   >
>      >   > When I look at
>      >   >
>     src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java, the
>      >   > reason it requires that first call is, like you said, that
>     the frame
>      >   > is
>      >   > created only at the first heapIterationFractionUpdate.
>     However, could
>      >   > we
>      >   > not test frame and if it is not created, don't try to remove it?
>      >
>      >   I actually did that initially, but had the feeling people would
>     think
>      >   that was an even worse code smell ;) I don't have a strong
>     opinion on
>      >   this, so I updated the webrev to check for null instead.
>      >
>      > http://cr.openjdk.java.net/~pliden/8209163/webrev.1
> 
>     I perfer to webrev.0 because `frame` should be initialized in
>     ProgressiveHeapVisitor#prologue().
>     According to [1], HeapProgress which is used for progress bar will
>     initialize inner frame when it is null. IMHO the inner frame should
>     be initialized at ProgressiveHeapVisitor#prologue().
> 
> 
>     Thanks,
> 
>     Yasumasa
> 
> 
>     [1]
>     http://hg.openjdk.java.net/jdk/jdk/file/8abb0fa2c334/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java#l1689
> 
>      >   cheers,
>      >   Per
>      >
>      >   >
>      >   > Thanks,
>      >   > Jc
>      >   >
>      >   > On Wed, Sep 12, 2018 at 1:25 AM Per Liden <per.liden at
>     oracle.com <http://oracle.com>
>      >   > <mailto:per.liden <mailto:per.liden> at oracle.com
>     <http://oracle.com>>> wrote:
>      >   >
>      >   >     This patch avoids an assertion, and instead prints a warning,
>      >   >     when
>      >   >     trying to show the "Object Histogram" when using ZGC. I
>     also had
>      >   >     to add
>      >   >     a call to heapIterationFractionUpdate() so that the update
>      >   >     progress
>      >   >     frame is properly created, even when there are not heap
>     regions
>      >   >     to walk
>      >   >     over. Without this, you only get a call to
>      >   >     heapIterationCompleted(),
>      >   >     with a null frame, which throws a NullPointerException.
>     Always
>      >   >     making a
>      >   >     call to heapIterationFractionUpdate(0.0) in the prologue
>     avoids
>      >   >     this by
>      >   >     making sure we always created the frame, even if no more
>     fraction
>      >   >     updates will happen.
>      >   >
>      >   >     Bug: https://bugs.openjdk.java.net/browse/JDK-8209163
>      >   >     Webrev: http://cr.openjdk.java.net/~pliden/8209163/webrev.0
>      >   >
>      >   >     /Per
>      >   >
>      >   >
>      >   >
>      >   > --
>      >   >
>      >   > Thanks,
>      >   > Jc
>      >
> 
> 
> 
> -- 
> 
> Thanks,
> Jc


More information about the serviceability-dev mailing list