Java is a compiled language, but it is a compiled language with a difference. The Java compiler converts Java source code into something called byte code, rather than the machine code that runs on the CPU. The byte code is platform independent; when you run a Java application, a program called the Java virtual machine (JVM) reads the byte code and generates machine executable code, which is what is sent to the CPU. In short, the JVM is a bit like an interpreter. As you can see, the distinction between a compiled language and an interpreted language is not that clear when it comes to Java.