I've been doing lots of modularization work, but I'm not quite ready to check it in yet. I've now split the class library assembly into ten assemblies and I've got "shared class loader" support working (at least for the core class library scenario).
I've been positively surprised by how many scenarios can be supported while only loading IKVM.OpenJDK.Core.dll. As the graph below shows, it has more (necessarily circular) dependencies than I would like, but for a number of scenarios I've carefully tweaked the set of classes in Core to enable lazy loading the dependencies only when they are really needed.
I'm not yet ready to commit to supported "Core-only" scenarios, but here's a flavor of some things I've been able to do:
- Running "Hello, World!" in dynamic mode
- Serialization
- Reflection
- File I/O & Socket I/O (both classic and nio)
Packages included in Core:
- java.io
- java.lang
- java.lang.annotation
- java.lang.ref
- java.lang.reflection
- java.math
- java.net
- java.nio
- java.nio.channels
- java.nio.channels.spi
- java.nio.charset
- java.nio.charset.spi
- java.security
- java.security.cert
- java.util
- java.util.concurrent
- java.util.concurrent.atomic
- java.util.concurrent.locks
- java.util.regex
- javax.net
Here is the assembly dependency graph (click the image to enlarge):

Here are the current assembly file sizes:
IKVM.OpenJDK.Core.dll |
3,278,848 |
IKVM.OpenJDK.Security.dll |
2,646,016 |
IKVM.OpenJDK.Util.dll |
1,111,040 |
IKVM.OpenJDK.Xml.dll |
8,497,664 |
IKVM.OpenJDK.SwingAWT.dll |
3,040,768 |
IKVM.OpenJDK.Charsets.dll |
5,017,088 |
IKVM.OpenJDK.Corba.dll |
2,335,232 |
IKVM.OpenJDK.Management.dll |
1,180,160 |
IKVM.OpenJDK.Misc.dll |
2,668,032 |
IKVM.OpenJDK.Text.dll |
628,736 |
|
30,403,584 |
It's interesting to see that the total is slightly less than the previous size of IKVM.OpenJDK.ClassLibrary.dll (30,472,704).