About EASy.VM
See the following sections for an overview about EASy:
To download the technical documentation of EASy.VM, please refer to the Downloads
Area.
[ Back to Homepage ]
Introduction
The Java virtual machine specification was introduced in 1992 by SUN Microsystems.
It has originally been designed as a runtime system for consumer devices,
which would be able to execute machine independent code with the goal to
connect these devices to a network and to distribute programs very easy
to them.
In the meantime a couple of implementations of virtual machines for
several workstation platforms have been created, since software companies
got the idea to create a system which could replace classic operating systems
in the future.
But this moved the evaluation of Java into a direction where interpreter
and the class libraries got bigger and bigger with the result to be unable
to fit into small consumer devices. EASy as a portable clean-room-implementation
is able to execute bytecodes according to the SUN Java-standard written
by any Java Development Kit. It provides selected standard classes which
are useful for interacting with microcontroller platforms.
Special gimmicks are technologies like microkernel architecture, file
systems, device driver model, memory management with garbage collection
at runtime, remote kernel debugger, and dynamically loadable code modules,
most of them more rarely seen on small controller platforms.
Since Java is a platform independent technology it is possible to execute
programs which have been written under any development kit as long as runtime
interpreter and development kit go by the Java specification and the used
library classes are available for the target system. To enhance this target
system independency, EASy is designed to be portable to nearly every platform.
Certain hardware dependent features (such as different filesystems, drivers
etc.) can be ported within days.
[ Back to Overview ]
Portability
EASy.VM is written in 100% ANSI-C programming language to ensure maximum portability
to platforms with a C compiler available. C-runtime libraries are not required
for compilation. The architecture allows running on environments with or
without underlying operating system. Current implementations run under:
-
ARM processors
-
ETS Embedded Tool Suite from VenturCom
-
Philips-XA and Smart-XA processors
-
80C167 family of processors
-
Linux (80x86 and higher)
-
DOS (8086, 80x86 and higher)
-
WindowsNT/2000/XP (80x86 and higher)
-
WindowsCE 2.x (any processor)
-
OS/2 2.x/3.x/4.x (80x86 and higher)
-
RTTarget32 (an embedded Win32 kernel, by On-Time Computing) (80x86 and
higher)
-
RTTarget16 (an embedded 16bit kernel, by On-Time Computing)
-
PowerPC under AIX operating system
-
Hitachi H8/300H and SH-1 without underlying operating system
-
8051 family systems
[ Back to Overview ]
Code sizes
EASy.VM was designed to run on 16bit-platforms and is therefore very compact
in code. The VM scales between 30kB and 100kB, dependent on the built-in features.
The class library is configurable (dependent on the features needed by the Java application
to be run). Its typical size is 30kB.
[ Back to Overview ]
Hardware/OS abstraction layer "HELIOS"
To ensure minimum effort when porting to new platforms and operating systems,
EASy.VM uses the platform independent API of HELIOS, a hardware abstraction
layer developend by Jakom. HELIOS encapsulates all hardware dependent functions.
This component needs to be implemented whenever a portation to another
target platform is initiated.
[ Back to Overview ]
Device Driver Architecture of HELIOS
The architecture of HELIOS enables developers to write portable device
drivers in native code. They can easily be embedded into the system to
act as interface to nearly any underlying hardware.
[ Back to Overview ]
Java source level debugging support via JDWP and EDI
Functionality was added to the EASy.VM runtime to support the JDWP and EDI debugging
protocols. This enables analysis and debugging of Java classes directly running on the
target platform using current state of the art Java development kits.
[ Back to Overview ]
File System Support
Native and non-native (bytecode) classes, which contain the application
and common functionality, can be loaded over pluggable file system drivers
(which are part of the HELIOS layer) by the interpreter. Currently, the
following drivers are available:
- package file system (several compressed and uncompressed file formats, like .jar, .zip, .nzf, see below for a comparison)
- memory block file system (for temporary data files held in volatile memory, e.g. RAM)
- distributed (network) file system to work with files over serial communication ports or sockets
- local file system (e.g. file system provided by the underlying operating system)
Furthermore, ROM- and FLASH- file systems are supported.
With the support of compression techniques inside JAR and ZIP file archives, the space required for class files
on embedded targets and workstations can be reduced.
Additionally, EASy.VM provides support for optimized and compressed NZF file archives, offering a breakthrough
improvement of space usage on embedded systems and workstation platforms. In comparison to JAR, NZF file archives
occupy significantly less filesystem space. See the following table for a comparison on an example set of files:
| File type |
Compressed |
Optimized |
Size comparison* |
ROMable |
| NZF file |
X - - |
X X - |
27.799 Bytes 48.052 Bytes 98.399 Bytes |
no yes yes |
| JAR file |
X - |
n/a n/a |
61.068 Bytes 104.458 Bytes |
no yes |
| ZIP file |
X - |
n/a n/a |
62.222 Bytes 106.711 Bytes |
no yes |
*aquired over a randomly selected set of 75 files of the standard class library
As shown above (and proved by benchmarks), the NZF class package format leads to a decrease of space occupied
by class files by at least 50percent. For embedded platforms, where RAM is an issue, NZF archives can be stored in an
uncompressed, but optimized format, which also brings a decrease in usage of ROM space compared to the uncompressed
JAR and ZIP file formats.
[ Back to Overview ]
Dynamic resizeable, segmented stack architecture
EASy.VM takes advantage of a dynamic resizable operand stack which is - different
to C-code - non-contiguous but allocated in segments. This can lead to
a markable decrease of space required to run applications, as the stack
segments can be dynamically allocated and deallocated, dependent on the
requirements of your application. To increase the allocation speed, deallocated
stack segments are not immediately freed, but collected in a "bucket" and
"recycled" in further allocations.
Additionally, the stack usage is optimized in a manner that only accessed
objects will be created in memory.
[ Back to Overview ]
3-level-garbage-collection
EASy.VM provides a 3-level, speed optimized garbage collector which is tightly
conneted to the memory management. It runs either transparent to the programmer
or can be invoked by a system call.
[ Back to Overview ]
Preemptive multithreading with priority control
on bytecode level
EASy.VM can handle threads according to the Java specification, even
on non-multitasking platforms/operating systems. This means, EASy.VM runs
as a single task and handles Java threads itself.
[ Back to Overview ]
[ Back to Homepage ]