Hi Thomas,

On 27/06/2018 10:13 PM, Thomas Stüfe wrote:
Hi David,

On Mon, Jun 25, 2018 at 7:48 AM, David Holmes <david.hol...@oracle.com> wrote:
Hi Thomas,


On 23/06/2018 5:10 AM, Thomas Stüfe wrote:

Resent with the correct subject, sorry.

..Thomas

On Fri, Jun 22, 2018 at 9:08 PM, Thomas Stüfe <thomas.stu...@gmail.com>
wrote:

Hi all,

may I have reviews for this small enhancement to the jcmd
VM.classloader diagnostic command:

https://bugs.openjdk.java.net/browse/JDK-8205531

http://cr.openjdk.java.net/~stuefe/webrevs/8205531-vm.classloader-tree-folding/webrev.00/webrev/


VM.classloaders prints a tree of class loaders. This tree can grow a
lot and become unwieldy, especially with a lot of similar loaders. One
prime example is the DelegatingClassLoader. It would be helpful were
all these loaders:

13114:
+-- <bootstrap>
        |
        +-- "platform",
jdk.internal.loader.ClassLoaders$PlatformClassLoader
              |
              +-- "app", jdk.internal.loader.ClassLoaders$AppClassLoader
                    |
                    +-- test3.internals.InMemoryClassLoader
                          |
                          +-- jdk.internal.reflect.DelegatingClassLoader
                          |
                          +-- jdk.internal.reflect.DelegatingClassLoader
                          |
                          +-- jdk.internal.reflect.DelegatingClassLoader
                          |
                          +-- jdk.internal.reflect.DelegatingClassLoader
                          |
                          +-- jdk.internal.reflect.DelegatingClassLoader
                          |
                          ...... repeat 1495 times

   folded into one:

13114:
+-- <bootstrap>
        |
        +-- "platform",
jdk.internal.loader.ClassLoaders$PlatformClassLoader
              |
              +-- "app", jdk.internal.loader.ClassLoaders$AppClassLoader
                    |
                    +-- test3.internals.InMemoryClassLoader
                          |
                          +-- jdk.internal.reflect.DelegatingClassLoader
(+ 1499 more)


I don't quite understand that. These are different instances aren't they -
potentially uniquely named? So if we gave all loaders a default name (like
we do threads) they would all show up expanded again - right?


This patch will fold loaders loaded by the same parent, having the
same class and the same or no name.

Example:

25401:
+-- <bootstrap>
       |
       +-- "platform", jdk.internal.loader.ClassLoaders$PlatformClassLoader
       |     |
       |     +-- "app", jdk.internal.loader.ClassLoaders$AppClassLoader
       |
       +-- "small-loader", test3.internals.InMemoryClassLoader (+ 1101 more)

Note that I compare addresses of _Symbol_. So, loaders which have the
_same_ default name still fold, see example above.

Right. So in the case of DelegatingClassloader, today this change will fold them all into one because they are unnamed. If tomorrow we give them a unique name then they will no longer fold. There's no substantive difference between the two cases that I can see so why should they present differently? I guess I'm not sure the name is actually significant here.

What happens when some of these similar loaders have distinct child loaders? How will things be grouped and displayed then?

Thanks,
David

Thanks, Thomas


typo:

!   // we we add a

Not a review as I don't know any of the logic being modified.

David




Original idea by Bernd Eckenfels, see

http://mail.openjdk.java.net/pipermail/serviceability-dev/2018-May/023824.html

Thank you, Thomas

Reply via email to