0.1.0 / December 11, 2018
|Written in||C, Java|
A micro Java Virtual Machine (uJVM) is open source Java Virtual Machine implementation specifically developed for use on embedded systems with low RAM and persistent storage available (e.g., a variety of boards based on ARM Cortex-M processor cores (M3, M4F, M23) and Atmel AVR microcontroller boards with at least 64 kB of Flash memory). Developers intend to follow The Java Virtual Machine Specification Java SE 7 Edition. While the amount of H/W resources available on embedded systems necessarily constrains size of executable code and libraries available, uJVM provides interfaces that let Java applications interact with H/W devices (timers, GPIO interfaces, etc.).
uJVM was designed in accordance with overall architecture described in Java Virtual Machine Specification Java SE 7 Edition. So basically it can be divided into 3 parts:
- Class loader
Class loader of uJVM can load contents of classes stored in .class or .jar files into memory, perform linking and initialization.
- Managed memory areas
uJVM supports thread specific register storage, memory allocation for heap and thread-specific stacks and garbage collection.
- Execution engine
Due to severe memory footprint restrictions, uJVM has only bytecode interpreter as execution engine - implementing JIT compiler would greatly increase memory consumption. uJVM execution engine gives Java code access to JNI methods; however, as of January 2019 Java classes that directly contain native C code are not supported yet.
- x86_64 Linux
- Arduino MEGA 2560
For every supported platform there's quick start guide and working source code examples.
As of January 2019, uJVM is used as bare-metal application that does not require any OS for H/W interaction; however, there are plans to make it usable as framework that enables execution of Java applications for RTOSes, e.g., FreeRTOS, NuttX or Zephyr.
This article "UJVM" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:UJVM. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.