RFR: 8017588: SA: jstack -l throws UnalignedAddressException while attaching to core file for java that was started with CMS GC

Jiangli Zhou jiangli.zhou at oracle.com
Wed Jul 3 17:34:07 UTC 2013


Hi Erik,

Looks good to me. Thanks a lot for fixing this!

Jiangli

On 07/03/2013 01:33 AM, Erik Helin wrote:
> Hi all,
>
> this change fixes an issue where we could not run jstack -l -F on a
> java process running with -XX:+UseConcMarkSweepGC.
>
> The problem originated from the following change in hotspot:
>   changeset:   3707:8bafad97cd26
>   parent:      3693:973046802b6f
>   7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
>
>   diff --git a/src/share/vm/oops/instanceKlass.hpp b/src/share/vm/oops/instanceKlass.hpp
>   --- a/src/share/vm/oops/instanceKlass.hpp
>   +++ b/src/share/vm/oops/instanceKlass.hpp
>   @@ -717,9 +763,11 @@
>      {
>        return object_size(align_object_offset(vtable_length()) +
>                           align_object_offset(itable_length()) +
>   -                       (is_interface() ?
>   -                        (align_object_offset(nonstatic_oop_map_size()) + (int)sizeof(klassOop)/HeapWordSize) :
>   -                        nonstatic_oop_map_size()));
>   +                       ((is_interface() || is_anonymous()) ?
>   +                         align_object_offset(nonstatic_oop_map_size()) :
>   +                         nonstatic_oop_map_size()) +
>   +                       (is_interface() ? (int)sizeof(klassOop)/HeapWordSize : 0) +
>   +                       (is_anonymous() ? (int)sizeof(klassOop)/HeapWordSize : 0));
>      }
>
> The corresponding code in the serviceability agent was not updated:
>
>   agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java:
>    public long getObjectSize() {
>    long bodySize =    alignObjectOffset(getVtableLen() * getHeap().getOopSize())
>                     + alignObjectOffset(getItableLen() * getHeap().getOopSize())
>                     + (getNonstaticOopMapSize()) * getHeap().getOopSize();
>    return alignObjectSize(headerSize + bodySize);
>    }
>
> This fix updates the SA code to be like the hotspot code. I've also
> introduced variables in the hotspot code and in the SA code to make it
> easier to compare the two versions.
>
> Webrev: http://cr.openjdk.java.net/~ehelin/8017588/webrev.00/
>
> Testing:
> - JPRT
> - Running jstack -l -F successfully on a java process using -XX:+UseConcMarkSweepGC
>
> Thanks,
> Erik




More information about the hotspot-gc-dev mailing list