Code review request: JDK-8005048,NMT: #loaded classes needs to just show the # defined classes
David Holmes
david.holmes at oracle.com
Tue Dec 18 17:15:20 PST 2012
On 19/12/2012 11:05 AM, Vitaly Davidovich wrote:
> You sure define is last step? Even classloader javadoc says it still
> needs to be resolved (linked and verified, I presume).
Sorry I was being imprecise. After class definition the class is loaded
but may still need to be resolved (linked).
A loaded Class at the Java level can be in one of three states:
- loaded, unlinked, uninitialized
- loaded, linked, uninitialized
- loaded, linked, initialized
Thanks,
David
> Sent from my phone
>
> On Dec 18, 2012 7:59 PM, "David Holmes" <david.holmes at oracle.com
> <mailto:david.holmes at oracle.com>> wrote:
>
> On 19/12/2012 10:54 AM, Vitaly Davidovich wrote:
>
> David,
>
> I suspect this is referring to the fact that InstanceKlass (VM
> representation of java.lang.Class) can be in several states:
> defined/allocated, loaded, linked/verified, etc.
>
>
> Okay. It would be good to be clear on that.
>
> Perhaps Classloader.define() and loadClass() are the classloader
> level
> distinctions you're interested in?
>
>
> define() is the final step of loadClass(): first find the bytes for
> the class then send them to the VM via defineClass to actually load
> the class. "define" is not a state at the Java level.
>
> Thanks,
> David
>
>
> Sent from my phone
>
> On Dec 18, 2012 6:30 PM, "David Holmes" <david.holmes at oracle.com
> <mailto:david.holmes at oracle.com>
> <mailto:david.holmes at oracle.__com
> <mailto:david.holmes at oracle.com>>> wrote:
>
> On 19/12/2012 12:43 AM, Zhengyu Gu wrote:
>
> Hi David,
>
> Thanks for reviewing.
>
> On 12/17/2012 9:41 PM, David Holmes wrote:
>
> Hi Zhengyu,
>
> On 18/12/2012 6:11 AM, Zhengyu Gu wrote:
>
> Current NMT implementation reports number of loaded
> classes at query
> time, but number of defined classes is what is
> expected.
>
> This changset reflects two major changes:
>
> 1. It counts number of defined classes vs.
> number of
> loaded classes
>
>
> Can you explain what the distinction is please? I
> don't know
> what a
> "defined class" is.
>
> "defined class" refers to class definition (InstanceKlass), "loaded
> class" refers to instance.
>
>
> Sorry that didn't help. I don't understand what these two
> different
> things are (InstanceKlass vs. "instance" ???). Can you
> explain in
> terms of Java level class loading - when is a class
> "defined" versus
> "loaded"?
>
> Thanks,
> David
>
>
> 2. It counts number of defined classes for each
> generation, vs. counts
> at query time. In this way, the number of defined
> classes that NMT
> reports, should match the corresponding class
> metadata
> data. As the
> result, the data should be more accurate.
>
>
> Webrev:
> http://cr.openjdk.java.net/~____zgu/8005048/webrev.00/
> <http://cr.openjdk.java.net/~__zgu/8005048/webrev.00/>
> <http://cr.openjdk.java.net/~__zgu/8005048/webrev.00/
> <http://cr.openjdk.java.net/~zgu/8005048/webrev.00/>>
>
>
> I think we could benefit from NMT_ONLY(x) macros to
> get rid
> of the
> one-line conditional blocks eg in instanceKlass.cpp
>
> After consulting Chris Plummer, it does not have to
> exclude for
> embedded. But yes, have NMT_ONLY() macros will be very
> helpful,
> I will
> keep this in mind.
>
>
> ---
>
> src/share/vm/oops/____instanceKlass.hpp
>
> + #if INCLUDE_NMT
> + static int number_of_instance_classes() { return
> (int)_total_instanceKlass_____count; }
> +
> + private:
> + static volatile jint _total_instanceKlass_count;
> + #endif
>
> Why are we mixing int and jint here?
>
> Yes, it is bad idea. Will change to "int"
>
> Thanks,
>
> -Zhengyu
>
>
> ---
>
> I can't comment on the detailed memory management
> of the
> GenerationData.
>
> David
> -----
>
>
>
> Thanks,
>
> -Zhengyu
>
More information about the hotspot-dev
mailing list