This thesis presents the analysis, design and implementation of the Hardware near Virtual Machine (HVM) - a Java virtual machine for embedded devices. The HVM supports the execution of Java programs on low-end embedded hard- ware environments with as little as a few kB of RAM and 32 kB of ROM. The HVM is based on a Java-to-C translation mechanism and it produces self- contained, strict ANSI-C code that has been specially crafted to allow it to be embedded into existing C based build and execution environments; environ- ments which may be based on non standard C compilers and libraries. The HVM does not require a POSIX-like OS, nor does it require a C runtime library to be present for the target. The main distinguishing feature of the HVM is to support the stepwise addition of Java into an existing C based build and execution environment for low-end embedded systems. This will allow for the gradual introduction of the Java language, tools and methods into a existing C based development environment. Through program specialization, based on a static whole-program analysis, the application is shrinked to only include a conservative approximation of actual dependencies, thus keeping down the size of the resulting Java based software components. The Safety-Critical Java specification (SCJ), Level 0 and 1, has been imple- mented for the HVM, which includes preemptive task scheduling. The HVM supports well known concepts for device level programming, such as Hardware Objects and 1st level interrupt handling, and it adds some new ones such as native variables. The HVM is integrated with Eclipse. The work presented here is documented in 5 conference papers, 1 journal article, and 1 extended abstract, which are all included as part of this thesis. A summary of these papers is given in a separate Section.