IKVM.NET Concepts

This section discusses several important concepts about the capabilities and limitations of IKVM.NET.

Class Loading

IKVM.NET fully supports dynamic Java class loading, both in Java applications running in the ikvm JVM, as well as in Java applications which have been converted to .NET CIL using ikvmc.

Class Loading in Dynamically Interpreted Java Applications

When you run a Java application using ikvm, ikvm finds and loads Java .class files much like other Java VM's. See the ikvm notes for details.

Class Loading in ikvmc-compiled Java Applications

When you convert a Java application to CIL using ikvmc, it executes as "native" .NET code. Each .NET assembly will have its own Java class loader instance (typically of the type ikvm.runtime.AssemblyClassLoader). This class loader will load classes using the following algorithm:

  1. The corresponding assembly is searched first. Thus, if the class exists in the assembly, it will be found there.
  2. All assemblies directly referenced by corresponding assembly are searched.

For more details see these two articles: Class Loading Architecture, Writing a Custom Assembly Class Loader

Debugging Support

Java applications converted to CIL using ikvmc with the -debug option can be debugged using standard .NET / Mono debugging tools. Remember to compile the Java source code using the appropriate debug option (javac: -g or jikes: -g:lines,vars,source).

by Stephen Schaub