Looks good. (Not a Reviewer). /Staffan
On 26 feb 2013, at 03:03, Krystal Mo <[email protected]> wrote: > 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: [email protected] > > Thanks, > Kris > > On 2013/2/25 17:14, 云达(Yunda) wrote: >> Kris, >> >> Thanks a lot! >> >> Regards, >> Yunda >> >> From: [email protected] >> [mailto:[email protected]] On Behalf Of Krystal Mo >> Sent: Monday, February 25, 2013 7:19 PM >> To: [email protected] >> 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. >> >> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其 >> 他用途、或透露本邮件之内容。谢谢。 >
