Request for Review: JDK-8008796: SA: Oop.iterateFields() should support CompressedKlassPointers again

Krystal Mo krystal.mo at oracle.com
Fri Mar 15 10:55:39 PDT 2013


cc'ing hotspot-runtime for a review


-------- Original Message --------
Subject: 	Request for Review: JDK-8008796: SA: Oop.iterateFields() 
should support CompressedKlassPointers again
Date: 	Mon, 25 Feb 2013 18:03:20 -0800
From: 	Krystal Mo <krystal.mo at oracle.com>
Organization: 	Oracle Corporation
To: 	"云达(Yunda)" <yunda.mly at taobao.com>
CC: 	serviceability-dev at openjdk.java.net 
<serviceability-dev at openjdk.java.net>



Hi all,

Could I have a review for this small change, please?

Webrev: http://cr.openjdk.java.net/~kmo/8008796/webrev.00/
CR: http://bugs.sun.com/view_bug.do?bug_id=8008796 (should be available 
externally soon)

8008796: SA: Oop.iterateFields() should support CompressedKlassPointers 
again
Summary: add a missing change from JDK-7054512 so that 
Oop.iterateFields() works with UseCompressedKlassPointers
Reviewed-by: ?
Contributed-by: yunda.mly at taobao.com

Thanks,
Kris

On 2013/2/25 17:14, 云达(Yunda) wrote:
>
> Kris,
>
> Thanks a lot!
>
> Regards,
>
> Yunda
>
> *From:*serviceability-dev-bounces at openjdk.java.net 
> [mailto:serviceability-dev-bounces at openjdk.java.net] *On Behalf Of 
> *Krystal Mo
> *Sent:* Monday, February 25, 2013 7:19 PM
> *To:* serviceability-dev at openjdk.java.net
> *Subject:* Re: Oop.iterateFields() should support 
> CompressedKlassPointers again
>
> Hi Yunda,
>
> Thanks for fixing this. I actually have the exact same fix for this 
> problem, along with fixes for some other problems in SA in my local 
> workspace, but haven't come around to sending it out for public review 
> yet.
>
> I think this is just a missed change in JDK-7054512. I have created a 
> JIRA issue for you: JDK-8008796: SA: Oop.iterateFields() should 
> support CompressedKlassPointers again. I'll prepare a webrev and send 
> it out for official review later.
>
> Thanks,
> Kris
>
> On 2013/2/25 2:58, 云达(Yunda) wrote:
>
>     Hi all,
>
>     When I used CLHSDB just now I met this error:
>
>     hsdb> inspect 0x00000000ee255080
>
>     instance of "java/io/InputStream" @ 0x00000000ee255080 @
>     0x00000000ee255080 (size = 24)
>
>     Exception in thread "main" java.lang.InternalError: unimplemented
>
>              at sun.jvm.hotspot.oops.Oop.iterateFields(Oop.java:151)
>
>              at
>     sun.jvm.hotspot.oops.Instance.iterateFields(Instance.java:66)
>
>              at sun.jvm.hotspot.oops.Oop.iterate(Oop.java:143)
>
>              at
>     sun.jvm.hotspot.ui.tree.OopTreeNodeAdapter.getChildCount(OopTreeNodeAdapter.java:65)
>
>              at
>     sun.jvm.hotspot.CommandProcessor$Command.printNode(CommandProcessor.java:231)
>
>              at
>     sun.jvm.hotspot.CommandProcessor$24.doit(CommandProcessor.java:1008)
>
>              at
>     sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1897)
>
>              at
>     sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1867)
>
>              at
>     sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1747)
>
>              at sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:91)
>
>              at sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:35)
>
>     I found it’s caused by the code of
>     sun.jvm.hotspot.oops.Oop.iterateFields():
>
>        void iterateFields(OopVisitor visitor, boolean doVMFields) {
>
>          if (doVMFields) {
>
>     visitor.doCInt(mark, true);
>
>            if (VM.getVM().isCompressedKlassPointersEnabled()) {
>
>     *throw new InternalError("unimplemented");*
>
>            } else {
>
>     visitor.doMetadata(klass, true);
>
>            }
>
>          }
>
>        }
>
>     When compressed oops( which is by default) are used an
>     InternalError of “unimplemented” will be throwed. But actually it
>     can be implemented easily by just one line of code:
>
>     visitor.doMetadata(compressedKlass, true);
>
>     I checked the hotspot-rt repo and I found it was implemented this
>     way before changeset 3601, the main implementation of NPG. Since
>     3601 changed a whole lot of stuff, the ‘compressedKlass’ field
>     couldn’t get the right value, as in line 51:
>
>     // compressedKlass  = new
>     CIntField(type.getCIntegerField("_metadata._compressed_klass"), 0);
>
>     So the code in iterateFields() was changed to throwing an
>     InternalError accordingly.
>
>     But the ‘compressedKlass’ field can get the right value now. So I
>     think it’s time to change the code back and here’s the diff
>     against the latest hotspot-rt:
>
>     diff -r 2f881161d085
>     agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java
>
>     --- a/agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java Mon
>     Feb 25 18:25:24 2013 +0800
>
>     +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java Mon
>     Feb 25 18:47:08 2013 +0800
>
>     @@ -148,7 +148,7 @@
>
>          if (doVMFields) {
>
>     visitor.doCInt(mark, true);
>
>            if (VM.getVM().isCompressedKlassPointersEnabled()) {
>
>     -        throw new InternalError("unimplemented");
>
>     + visitor.doMetadata(compressedKlass, true);
>
>            } else {
>
>     visitor.doMetadata(klass, true);
>
>            }
>
>     Regards,
>
>     Yunda
>
>     ------------------------------------------------------------------------
>
>
>     This email (including any attachments) is confidential and may be
>     legally privileged. If you received this email in error, please
>     delete it immediately and do not copy it or use it for any purpose
>     or disclose its contents to any other person. Thank you.
>
>     本电邮(包括 任何 附件)可能 含有 机密资料并受法律保护。如您不是正确
>     的收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他
>     用途、或透露本邮件之内容。谢谢。
>
>
> ------------------------------------------------------------------------
>
> This email (including any attachments) is confidential and may be 
> legally privileged. If you received this email in error, please delete 
> it immediately and do not copy it or use it for any purpose or 
> disclose its contents to any other person. Thank you.
>
> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件 
> 人,请您立即删除本邮件。请不要将本电邮进行复制并用作任 何其 他用途、或 
> 透露本邮件之内容。谢谢。



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20130315/a0b99475/attachment-0001.html 


More information about the serviceability-dev mailing list