Titre : Les machines virtuelles virtuelles: expérience de la JnJVM (JnJVM is not a JVM) Auteur : Bertil Folliot (REGAL/RSR/LIP6 - UPMC) Abstract : Java runtime became a standard in heterogeneous environments. Indeed, Java hides the software heterogeneity and facilitates the construction of applications in an heterogeneous environment. To hide the heterogeneity of such environment, a Java Virtual Machine hides the underlying execution environment and provides a clearly defined interface to interact with the system. Most of the time, this interface is enough to build an application, but there are some kind of applications that require particular abstractions, like persistence, aspect or real time. As Java Virtual Machines are monolithic, to inject this new behaviors, Java programmers must develop or modify dedicated Java Virtual Machines and get away from the specification. Applications developed for these virtual machines are losing in portability - thus increases the software heterogeneity - and the code that implements the specialized behavior remains poorly reusable. Moreover, dynamic code loading prevents an administrator from knowing which kind of specialized behaviors will be necessary when the JVM is launched. In this work, we propose to let the application build itself on the fly its specialized Java Virtual Machine by modifying an adaptable JVM, called the JnJVM, developed during this work. The Java application is now portable, because it can be executed on every JnJVM and the JVM is modified when the application is loaded and not at the launching time. Our evaluation shows that the JnJVM is equivalent in performance at HotSpot 1.0, the first JVM made by SUN Microsystem. To show the interest of our approach, we have constructed three main specializations of the JnJVM: an escape analysis runtime, an aspect weaver at the JVM level and a load balancing system to improve the performance of an application server. [Software- Practice and Experience, 38(15):1643-1675, 2008]