On Wed, 3 Mar 2021 23:42:31 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

> This section seems to be the key to your changes, but I have to admit that I 
> don't follow how it all ties in together. Maybe you can explain the overall 
> structure of the Tool subclasses to help explain. They seem to be overloaded 
> with modes that make it hard to follow all the logic. For example, you've 
> added the `Tool(HotSpotAgent agent)` constructor, and we already have 
> `Tool()` and `Tool(JVMDebugger d)`. It's unclear to me what the use case is 
> for each. Also, we have about 10 subclasses of Tool. Why do only `PMap` an 
> `PStack` need this new constructor.

All of traditional serviceability commands (jstack, jmap, etc...) seem to 
extend `Tool` because it has a function to parse commandline args and to attach 
debuggee commonly.
`Tool` supports several attach mechanism: `Tool()` supports attach debuggee 
manually, `Tool(JVMDebugger)` supports attach debuggee via available 
`JVMDegbugger`. `HotSpotAgent` communicates to debugee, so `Tool` would create 
its instance. Thus I added `Tool(HotSpotAgent)` to use available remote debug 
server.

AFAICS only `PMap` and `PStack` do not support remote debug server, so I 
changed for them.
(I plan to support `pmap` and `pstack` when we attach remote debug server, so 
it is important to know debuggee type.)

> BTW, looking at Tool and its subclasses has made me realize we have a whole 
> other area of historical tool baggage, similar to what we are discussing with 
> CLHSDB and HSDB. My guess is all these tool subclasses used to be invoked 
> directly from the java command line. Now they are all hidden behind `jhsdb` 
> subcommands, but still carry the old java command line support. In addition, 
> when adding `jhsdb` and it's subcommands, it looks like there was an effort 
> to mimic the existing Attach API commands like jmap and jinfo, so the SA 
> versions of these commands have multiple modes which invoke different Tool 
> subclasses. For example, `jhdsb jmap` alone can invoke the ClassLoaderStats, 
> FinalizerInfo, ObjectHistogram, PMap, and HeapSummary tools, in addition to 
> dumping the heap graph in HProf or GXL format. I think things would have been 
> simpler and cleaner if each of these were made separate `jhsdb` subcommands, 
> but it's probably too late for that. I suppose we could deprecate the 
> existing sub-
 commands and add all these new sub-commands, but that will just make things 
harder for us until the old commands are eventually removed, which might never 
happen.

I agree with you it is too late to happen.
As I commented in 
https://github.com/openjdk/jdk/pull/2773#issuecomment-790203478 , we can do 
simplify for them as possible. For example, we can remove `main()` and related 
methods (e.g. showing usage) from them. If we can remove commandline support 
from all tool classes, It might help a little to maintain.

-------------

PR: https://git.openjdk.java.net/jdk/pull/2766

Reply via email to