RFR: 8079408: Reimplement TraceClassLoading, TraceClassUnloading, and TraceClassLoaderData with Unified Logging.

David Holmes david.holmes at oracle.com
Tue Jan 26 23:56:31 UTC 2016


On 27/01/2016 7:39 AM, Ioi Lam wrote:
>
>
> On 1/26/16 12:48 PM, David Holmes wrote:
>> On 27/01/2016 6:44 AM, Max Ockner wrote:
>>> David,
>>> In general, we want to keep logging messages the same as before. This
>>> fix contains changes to the logging output as well.
>>
>> Why are we changing the logging output? And why mix the two changes?
>>
>
> David,
>
> OLD:
>
> [Loaded xxx from yyyy]
>
> NEW:
>
> [info ][classload] xxx source: yyyy
>
> Keeping the "Loaded" there seems superfluous. It would look like
>
> [info ][classload] Loaded xxx source: yyyy
>
> The point of UL is to remove the need for ad-hoc tags such as "Loaded".
>
> Also, the original [] brackets are inconsistent with the UL style, so
> they are removed.
>
> I think it's better to change over to the new UL style rather than
> keeping the older odd style. Even if we don't, the addition of the
> [info][classload] characters would break some scripts anyway (e.g., my
> old scripts would grep for "*^\\[Loaded*" , so we can't get 100%
> backwards compatibility.
>
> The GC UL changes would also break existing scripts (such as those
> analyzing pause times, etc), so we are not the only one here.

Well I hope there will be a lot of documentation/release-note entries 
about the impact of UL.

Thanks,
David
-----

> - Ioi
>
>> Thanks,
>> David
>>
>>> Max
>>> On 1/26/2016 3:33 PM, David Holmes wrote:
>>>> On 27/01/2016 6:25 AM, Max Ockner wrote:
>>>>> I am working on changing the affected tests to look for the proper
>>>>> output.
>>>>
>>>> Late to the party but should we not be trying to maintain the existing
>>>> basic format of the log messages so that anyone who already regularly
>>>> uses -verbose:class and has scripts etc that check this, will still
>>>> see basic things like:
>>>>
>>>> [Loaded xxx from yyyy]
>>>>
>>>> ?
>>>>
>>>> David
>>>>
>>>>  -Max
>>>>>
>>>>> On 1/26/2016 2:23 PM, Coleen Phillimore wrote:
>>>>>>
>>>>>> Thanks for recapping the decision.  I didn't remember it from all our
>>>>>> discussions, etc.
>>>>>>
>>>>>> As the one who looks at these logs and is parsing these for CDS,
>>>>>> thank
>>>>>> you for confirming that this is intentional.  Do you really have two
>>>>>> different output files for info and debug info?
>>>>>>
>>>>>> Max/Ioi can you add a comment to the code.  This looks easily like
>>>>>> someone would "fix" because it looks funny.
>>>>>>
>>>>>> Thanks,
>>>>>> Coleen
>>>>>>
>>>>>> On 1/26/16 12:31 AM, Ioi Lam wrote:
>>>>>>> On 1/25/16 11:58 AM, Coleen Phillimore wrote:
>>>>>>>>
>>>>>>>> Hi Max,
>>>>>>>>
>>>>>>>> This looks pretty good.  It's a large change!  A couple of
>>>>>>>> comments:
>>>>>>>>
>>>>>>>> http://cr.openjdk.java.net/~mockner/classload.03/src/share/vm/classfile/classFileParser.cpp.udiff.html
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> As Harold pointed out earlier this change should check for 'else'.
>>>>>>>>
>>>>>>>> *!if (_log_is_enabled(Info, classload)_) {*
>>>>>>>> *!_ik->print_loading_log(LogLevel::Info, _loader_data, _stream)_;*
>>>>>>>> }  else
>>>>>>>> *+ if (log_is_enabled(Debug, classload)) {*
>>>>>>>> *+ ik->print_loading_log(LogLevel::Debug, _loader_data, _stream);*
>>>>>>>> }
>>>>>>>>
>>>>>>>
>>>>>>> Hi Coleen,
>>>>>>>
>>>>>>> The case for the 'else' has been discussed before. Please refer to
>>>>>>>
>>>>>>> http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2015-November/016460.html
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2015-November/016904.html
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> To recap: the reason for NOT having the 'else' is for:
>>>>>>>
>>>>>>> java -cp ~/tmp -Xlog:classload=info:file=info.log
>>>>>>> -Xlog:classload=debug:file=debug.log Foo
>>>>>>>
>>>>>>> If you add the 'else' there,  the debug-level output intended for
>>>>>>> debug.log will be missing.
>>>>>>>
>>>>>>> OK, you may say, let's switch the order of the Info and Debug
>>>>>>> checks.
>>>>>>> But if you do that, the info.log file will have no content.
>>>>>>>
>>>>>>> The 'info' level looks like this
>>>>>>>
>>>>>>>   java.lang.Object source: /jdk/lib/modules/bootmodules.jimage
>>>>>>>
>>>>>>> The 'debug' level looks like this (in a single line):
>>>>>>>
>>>>>>>   java.lang.Object source: /jdk/lib/modules/bootmodules.jimage
>>>>>>>   klass: 0x00000007c0000fb0 super: 0x0000000000000000
>>>>>>>   loader: [NULL class_loader] bytes: 1640 checksum: ddb8a6f3
>>>>>>>
>>>>>>> Because UL buffers at the line level, I cannot split the output into
>>>>>>> two parts like this:
>>>>>>>
>>>>>>>   [info ][classload] java.lang.Object source: ...
>>>>>>>   [debug][classload] klass: 0x00000007c0000fb0 super: ...
>>>>>>>
>>>>>>> Otherwise some unrelated output may be interleaved between the two
>>>>>>> lines, making the output impossible to parse. The ability to parse
>>>>>>> the output is very important to tools that analyze the class loading
>>>>>>> behavior (e.g., tools related to CDS).
>>>>>>>
>>>>>>> Due to this limitation of UL, I think our only choice is to repeat
>>>>>>> the class name and 'source' in both info and debug levels, hence NO
>>>>>>> 'else' in the code you quoted:
>>>>>>>
>>>>>>>   [info ][classload] java.lang.Object source: ..
>>>>>>>   [debug][classload] java.lang.Object source: .. klass: .. super: ..
>>>>>>>
>>>>>>> Thanks
>>>>>>> - Ioi
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>
>


More information about the hotspot-runtime-dev mailing list