Request Review: JDK-6479237 (cl) Add support for classloader names

Daniel Fuchs daniel.fuchs at
Wed Nov 2 11:29:30 UTC 2016

Hi Mandy,

On 01/11/16 23:42, Mandy Chung wrote:
> Hi Daniel,
> Here is the updated webrev incorporating your feedback:

  345         if (name != null && name.isEmpty()) {
  346             throw new IllegalArgumentException("name must be 
non-empty or null");
  347         }

I'd suggest passing 'name' to 'checkCreateClassLoader()' and do
this check in checkCreateClassLoader instead - in order to do
the checks before 'this' is created.


>> Also should there be some asserts somewhere verifying that moduleVersion
>> is null or empty when moduleName is null or empty? At the moment the
>> constructor will blindly accept a version for an unnamed module,
>> and I am assuming this is wrong - am I right?
> Good point.  The constructor should throw IAE if module name/version and class loader name is an empty string.

That's not exactly what I had in mind. I don't have
any particular feeling for whether "" should be allowed
or not. Maybe it would be simpler to just allow "" to mean the
same thing as 'null'. What I meant was:
Can moduleVersion be non null (and non empty) if moduleName is null
(or empty)? In other words can an unnamed module have a version?

Also if you add some validation to the constructor then
you will need to add a readObject to duplicate the validation
checks. And if you disallow "" then checking for isEmpty() in
toString() is not needed. But I have the feeling that simply
allowing "" and null to mean the same thing would be more
robust. It's just the question of having a moduleVersion
for an unnamed module that bothers me.

>> toLoaderModuleClassName will call ClassLoader.getName().
>> If a class loader overrides getName() then that might be a different
>> name than what StackTraceElement.getClassLoaderName() returns.
>> Is that an issue?
> I added a test to verify StackTraceElement that uses the ClassLoader's name field.  I also added @apiNote in ClassLoader::getName.

Ok - the @apiNote should cover that.

>> Also I wonder whether you should be considering including a fix
>> for as part
>> of this change (though arguably the bug has been there since
>> new fields were added to StackTraceElement in 9).
> It is related but it’s better to separate it from this issue.  Do you have cycle to help write a test case?  I can help fix JDK-8167099 later.

Right - no problem with that.
I haven't given any thought to a test case for JDK-8167099.
I believe it will prevent to connect a JDK 9 jvisualvm to a
JDK 8 process if not fixed though. Maybe serializing a ThreadInfo
composite data containing some MonitorInfo in JDK 8, and
then deserializing that in JDK 9 and trying to convert it
back to ThreadInfo in 9 would show the issue.

best regards,

-- daniel

> Mandy

More information about the hotspot-runtime-dev mailing list