The Java Virtual Machine or JVM interprets Java byte code (compiled Java code) and runs the program. JVM's have been created for many different platforms, which gives Java its platform-independent nature. It manages memory usage via a garbage collector. It also manages concurrent threads (the programmer can attempt to control certain threads, though).