RFR: 8065213 Specify and implement PlatformMBeanProvider for looking for all platform MBeans
shanliang
shanliang.jiang at oracle.com
Fri Jan 30 17:38:46 UTC 2015
Hi,
Thanks for all your comments, here is the new version:
http://cr.openjdk.java.net/~sjiang/JDK-8065213/01/
Mandy Chung wrote:
> ManagementFactory.java
> line 760: would be helpful to add some comments describing
> that the implementation of this method. You can use
> MemoryManagerMXBean and GarageCollectorMXBean as the example.
Done.
>
> Comments for the addProxyNames
Changed the method name to getProxyNames and added the comments
>
> line 867: it would be more readable if you break this into
> two statements.
> List<PlatofrmMBeanProvider> providers =
> AccessController.doPrivileged(...);
> providers.stream()
> .forEachOrdered(...);
Done
> line 875-886: worths formatting
>
> line 885 - instead of creating a HashMap and put entry in the
> forEach call.
> You could have do:
> .collect(toMap(PlatformComponent::getObjectNamePattern,
> Function.identity())
Yes, as:
.collect(toMap(PlatformComponent::getObjectNamePattern,
Function.identity(), (p1, p2) -> p1));
>
> You could also have the getMap() be called to initialize the
> componentMap
> static field (i.e. initialize it in the static initializer rather
> than lazily
> so the providers must be loaded anyway.
componentMap is now initialized statically.
>
> Can you add comments for the PlatformMBeanFinder methods?
Yes done
>
> com/sun/management/internal/PlatformMBeanProviderImpl.java
> line 43: does this mxbeanList have to be created lazily?
> Would it be better to make it a final field and create it at the
> constructor?
Done as final
> line 58-59, 66-67, 111-112, 118-119: nit formatting
>
> java/lang/management/DefaultPlatformMBeanProvider.java
> line 42: should this mxbeanList be a final field?
Done
> you can replace java.lang.management.MemoryManagerMXBean.class
> with MemoryManagerMXBean.class as it's in the same package.
> Same apply to other java.lang.management classes.
Done
>>> com/sun/management/internal/PlatformMBeanProviderImpl.java
>>> line 43: does this mxbeanList have to be created lazily?
>>> Would it be better to make it a final field and create it at the
>>> constructor?
>
> These providers will need to be loaded and the mxbeanList will be
> looked at except for the cases that we are sure that the MXBean only
> comes from the default provider. I see the cost of constructing
> mxbeanList involves loading several classes. If performance is an
> issue, perhaps the fast-path would be in ManagementFactory to defer
> loading providers and may be better to follow up the performance side
> in the second phase (that I expect more changes to sun/management
> classes)
>
> You may want to consider using limited doPrivileged (that can be done
> in the second phase).
OK, now they are final, I will add doPrivileged in next version.
Daniel Fuchs wrote:
> ManagementFactory.java:
>
> line 871: there's a stray debug trace that you probably
> forgot to remove:
>
> 871 System.out.println("\n\n===== jsl adding: "+provider);
:)
>
>
> lines 877-885:
>
> I believe it would improved readability if the content of the
> forEachOrdered statement was factored out in a private static
> method. Something like:
>
> .forEachOrdered(provider -> addToComponentMap(componentMap, provider))
>
>
> private static void addToComponentMap(
> Map<String,PaltformComponent<?>> cmpMap,
> PlatformMBeanProvider provider) {
> provider.getPlatformComponentList().stream()
> .collect(toMap(p -> p.getObjectNamePattern(), p -> p,
> (p1, p2) -> {
> throw new InternalError(p1.getObjectNamePattern()
> + " has been used as key for " + p1
> + ", it cannot be reused for " + p2);
> }))
> .values()
> .stream() // put all components into a map, "putIfAbsent"
> .forEach(p ->
> cmpMap.putIfAbsent(p.getObjectNamePattern(), p));
> }
You must know that code was changed :)
>
> PlatformMBeanProviderImpl.java:
>
> 105 * 3 OperatingSystemMXBean
>
> Not sure what '3' means here - I suggest to remove it.
OK
Thanks,
Shanliang
More information about the serviceability-dev
mailing list