1、Java的源代码是.java文件,使用compiler(即javac命令)把源文件编程.class文件,这个文件是java的byte code文件。然后使用java虚拟机(JVM)来运行这个中间代码,就可以得到想要的结果。运行JVM使用的命令是java <your_class>。
在JVM中有JIT(just-in-time) compiler, 是JIT把byte code转换成native machine code。 The JIT compiler translates the Java bytecode into native processor instructions at run-time and caches the native code in memory during execution.[3]
Java虽然是platform independent,但是JVM却不是。对于不同的操作系统和不同的CPU架构,有不同的JVM与之对应。JVM就是这样屏蔽底层硬件差异,使得Java program可以在任何平台上无差别的运行。[3]
2、Java依赖于JVM来运行它的程序。同时Java也依赖于Java Platform。Java Platform是由很多类(classes)构成的,这些类又被组织成为packages,每个package完成一项比较庞大的功能,比如networking, graphics, input/output, user-interface creation, 以及security。[1]
3、由于Java是在JVM上运行的,这并不是一个真实的硬件环境(寄存器啦、内存啦、指令操作啦等等),而仅仅是一个在内存中存在的虚拟的环境。所以,JVM这个软件如果编的不好,就会使得代码运行出错。不同机器上的JVM如果有差异,代码运行时也有可能会出现不同。[1]
4、JRE中包含JVM。JDK又包含JRE。JRE和操作系统进行交互。操作系统会提供各种system calls,通过这些system calls,就可以对硬件进行操作(让硬件来执行指令).[2]
5、Java的语法结构借鉴的是C和C++的。Java的面向对象的特性借鉴的是Smalltalk和Object-C的。[3]
6、Java的每个Object都是在Heap中分配的(即动态分配的),all variables of object types are references. Java的内存管理是通过JVM的garbage collection统一管理的,因此比较简单。[3]
[1] HOW JAVA WORKS: http://ecommerce.hostip.info/pages/643/Java.html
[2] How the Java virtual machine (JVM) works: http://www.codeproject.com/KB/java/How_JVM_Works.aspx
[2] Java (sotfware platform): http://en.wikipedia.org/wiki/Java_(software_platform)