Apogee's JREs are advanced software middleware for reliable execution of Java applications on embedded systems used in many types of devices, from cell phones and PDAs to set-top boxes and sophisticated Telematics devices. Apogee’s JREs are based on Java technologies licensed in form of reference implementations from IBM, such as the J9VM, JIT compiler, Java class libraries, and Java API packages, which are enhanced by Apogee for effective use on the targeted devices and for fast execution of Java applications on such devices. Apogee creates each JRE by porting to the OS/processor platform requested by a given customer suitable reference implementations of J9VM and JIT compiler, thus creating a base JRE, or by adapting for this platform one of the existing base JREs. Then, Apogee adds to the base JRE the OS/processor ports of optional components needed by customer's Java applications, and tunes the JRE for fast execution of such applications. This results in the final JRE in one of the following two configurations:
Each MJRE can be certified as compliant with the Java ME platform, in which case the devices having the MJRE deployed on them can be distributed with Sun's "steaming coffee cup" logo and/or "Java Powered" slogan. Each CJRE includes the implementations of most of Java 5 features. However, some features requiring runtime support from the underlying VM may not be fully implemented. For example assertions are accepted but not acted upon. In such situations, a customer can request Apogee to add the full runtime support for each such feature to its CJRE, such as Reflection of Generics, Annotations, Metadata, etc. Features of Apogee’s JREs Apogee's JREs offer the following features not offered in their entirety by JREs from other providers, including Sun and IBM.
After Apogee licensed IBM's Java technologies in 2003, it created at least one MJRE or CJRE for each of the above types of devices (over 50 JREs in total).
The obtained tracing and
dumping information can be used to minimize heap allocations and garbage
collections, and to reduce the multi-threading overhead.
Features of IBM’s J9VM Technology Originally developed by IBM over 15 years ago in a clean-room environment, and continuously enhanced and improved since then, the J9VM technology is based on a configurable architecture that allows its effective use for most types of embedded processors running popular operating system. The J9VM technology is highly portable, because it has an operating-system-independent layer that allows productive use of needed resources from an underlying OS and, at the same time, shields the other parts of J9VM from the idiosyncrasies of such an OS. The J9VM technology also provides a wide range of settings with respect to the supported functions. For example, it allows static or dynamic class loading, configuring of memory usage for the Java heap and loaded JAR files of Java applications, tuning of garbage collection to minimize its impact on runtime performance, and guiding the JIT compiler to achieve maximum speed-ups of executing Java applications. The
J9VM technology has the following features not available in their entirety in Java
VM technologies from other providers.
To make the J9VM technology more usable for use in Apogee's JREs, Apogee enhanced it in the following areas:
The
J9VM technology is provided to Apogee in form of reference implementations
(RIs) targeted at popular types of embedded processors running commonly used
operating systems. These RIs are ported by Apogee to devices requested by Apogee’s
customers and optimized for high performance when running customers’ Java
application on them. Features of IBM’s JIT Compiler Technology Each Apogee’s port of J9VM comes with integrated IBM’s 'small' JIT compiler called Cinquecento. Unlike the 'large' JIT compiler used with IBM's Java SE and Java EE configurations of J9VM, or the JIT compilers used in Java VMs of other providers of JREs, which have the runtime footprints 2 to 3 Mbytes, Cinquecento runtime footprint is 0.6 to 1.2 Mbytes depending on the target processor and the selected options. In addition, Cinquecento is remarkably fast when compiling bytecode methods of Java applications into native code, because it only applies such optimizations to the compiled methods that yield high speed ups without requiring extensive analysis of bytecode of each method. In
spite of its small size and fast compilation speed, Cinquecento typically
speeds up the runtime execution of most Java applications by 5 to 8 times of compared
with 100% interpretive execution of such applications. The use of Cinquecento is controlled with the -Xjit directive, which includes a number of options for instructing Cinquecento to selectively compile the bytecode methods of a given Java application for the highest possible runtime execution speed-up. There are three set of such options:
To make the JIT technology more usable for use in Apogee's JREs, Apogee enhanced it in the following areas:
|