From: Andreas S. <se...@st...> - 2012-05-01 17:34:11
|
Hi all, as two of my Scala benchmarks make (admittedly not much) use of java.lang.management features, I am trying to tackle issue 127 <http://jira.codehaus.org/browse/RVM-127> and friends. (Disclaimer: don't expect a full implementation; I am doing need-driven development here.) Now, the implementations required by GNU Classpath for the runtime and class-loading beans (VMRuntimeMXBeanImpl and VMClassLoadingMXBeanImpl) are fairly straight-forward, thanks to the Callbacks.AppStartMonitor and Callbacks.ClassLoadedMonitor. There's one issue, however, which I would like to discuss on this list, namely how to best register the callbacks. The original patch by Andrew Hughes suggested the following: > Index: rvm/src/org/jikesrvm/VM.java > =================================================================== > --- rvm/src/org/jikesrvm/VM.java (revision 13071) > +++ rvm/src/org/jikesrvm/VM.java (working copy) > @@ -206,6 +208,7 @@ public class VM extends VM_Properties im > // > if (verboseBoot >= 1) VM.sysWriteln("Initializing bootstrap class loader"); > String bootstrapClasses = VM_CommandLineArgs.getBootstrapClasses(); > + VM_Callbacks.addClassLoadedMonitor(new VMClassLoadingMXBeanImpl()); > VM_ClassLoader.boot(); // Wipe out cached application class loader > VM_BootstrapClassLoader.boot(bootstrapClasses); > However, this was prior Jikes RVM supporting more than one class library, so such a direct compile-time dependency on GNU Classpath classes, even when the respective class is part of libraryInterface/GNUClasspath, may be undesirable, if only because it would confuse Eclipse when using the Harmony (or maybe OpenJDK) class library instead. Now, what would be appealing to me is the following in VMClassLoadingMXBeanImpl: static { INSTANCE = new VMClassLoadingMXBeanImpl(); Callbacks.addClassLoadedMonitor(INSTANCE); } This way, VM.finishBooting() need only guarantee that the VMClassLoadingMXBeanImpl is initialized. However, predicting the exact monent of initialization is hard in Jikes RVM, as the class in question may end up in the bootimage, so maybe this is not the best solution. So, what's the preferred pattern for this kind of listener registration in Jikes RVM? (I'd rather not add yet another ad-hoc solution.) Best wishes, Andreas |