Apologies for keeping this thread going but I had a few
points/experiences I thought were worth mentioning. I'm currently
involved in porting Harmony to a VM licensed under the CPL [1] and I've
also been involved in developing a ThreadLocal implementation -
optimization of which was important due to Jython performance. Our
previous weak hash map thread local performed an allocation per get, we
came to a custom weak hash map implementation (via an array that could
reclaim soft references) and, when copyright assignment is in place, the
code should be pushed into GNU Classpath. The primary reason for pushing
the code to GNU Classpath is that this has been historically the class
library we have used, rather than strong convictions on open source
licenses and who the copyright should be assigned to. The reason to push
the code back is to ease maintenance and to benefit the community. The
reason for the implementation was to overcome the allocation problem and
I should probably investigate the performance of an array vs crazy bob's
vs an identity hash map vs weak identity hash map vs weak identity hash
map less any allocations.
On working on the port to Harmony I have found a number of times I need
to work from the DRLVM classes rather than the Harmony ones,
ReferenceQueues being just one example. A problem with the DRLVM classes
is they are poorly documented, so often I've created a hybrid class
combining the implementation from DRLVM with the comments of the main
class library - an exercise is to push these back up to Harmony's class
library [2]. I've been surprised with Harmony how much of the core API
is left for the VM implementor to figure out and fill-in. At FOSDEM
2008's free Java developers meeting [3] we had a discussion about
porting class libraries to VMs, the fruit of which has been an OpenJDK
innovator challenge [4] to at least document what the virtual machine
interface for OpenJDK is. As I understand porting class libraries:
- GNU Classpath has package private helper classes and reference
implementations for the JVM implementor to pick-up and some times
fill-in. A problem with this is moving the interface forward when its
not optimal [5] - ie you may want to fix everyones VM at the same time
as you change the reference implementation.
- Harmony provides stubs of kernel classes to be replaced by the VM
implementor. In some cases, like reference queues, we've preferred the
DRLVM implementation over that which is in the class library.
- OpenJDK requires a large set of native methods that are implemented,
in the Cacao VM, in a file known as jvm.cpp. Native methods are
problematic for metacircular, java-in-java VMs and a work around is to
rewrite the bytecode and provide non-native implementations.
Anyway, this has just been a long winded way to say that I agree with
Bob's statement:
Putting a perfectly generic class in the DRLVM library just creates more
work in the long term given that we're eventually going to move it into the
core lib anyway.
and that perhaps there's scope for something like a virtual machine
interface JSR that Harmony could participate in. This idea appeared to
get broad support from the VM implementors, free Java people and Sun at
FOSDEM.
Thanks,
Ian Rogers
[1] Common Public License, a variant of the Eclipse Public License where
IBM rather than the Eclipse Foundation are the steward
[2]
http://jikesrvm.svn.sourceforge.net/viewvc/jikesrvm/rvmroot/trunk/libraryInterface/Harmony/
[3] http://www.fosdem.org/2008/schedule/devroom/freejava
[4] http://openjdk.java.net/challenge/
[5] http://jira.codehaus.org/browse/RVM-517
--
http://www.cs.man.ac.uk/~irogers
http://icooolps.loria.fr/icooolps2008/index.php