Virtual machines (VMs) are a special subset of virtualized systems. Two of the more popular VMs are Java VM (JVM) and the .NET Common Language Infrastructure (CLI).
VMs have the advantage that applications are either interpreted or compiled just before using using technologies like just-in-time (JIT) compilers. As a result, application code can be checked, controlled, and limited if necessary.
It also makes para-virtualization a process that can be supported by the interpreter or compiler. This approach is of interest to developers like Web designers, where applications may need to migrate to different machines for load balancing.
One new approach in the Java community is being proposed in JSR-121, the Java Application Isolation API. It introduces the idea of isolates. The concept is that each Java application runs inside of an isolate. This is very similar to the ARINC 653 approach to secure single-image OS designs. The isolates run on the same Java Runtime Environment (JRE). The alternative is to place each application into its own JRE.
JSR-121 is designed to be platform-neutral, so the service can be moved to any system that runs a JVM. It also improves scalability and security by providing a controlled, hypervisor-like environment.