Request for Review: JDK-8008796: SA: Oop.iterateFields() should support CompressedKlassPointers again
Krystal Mo
krystal.mo at oracle.com
Fri Mar 15 22:04:23 PDT 2013
Thank you, Coleen!
- Kris
On 2013/3/15 11:13, Coleen Phillimore wrote:
>
> Looks good.
> Coleen
>
> On 3/15/2013 1:55 PM, Krystal Mo wrote:
>> 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/hotspot-runtime-dev/attachments/20130315/94b1cc90/attachment-0001.html
More information about the hotspot-runtime-dev
mailing list