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

Yasumasa Suenaga yasuenag at gmail.com
Thu Sep 13 13:25:37 UTC 2018


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
>   > <mailto:per.liden at 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
> 


More information about the serviceability-dev mailing list