1.1 对jAVA平台的理解
1.1.1 跨平台
Write once, run anywhere.
JAVA的跨平台特性与JAVA虚拟机的存在密不可分。JAVA语言本身与其他编程语言没什么特别大的差异,并不是说JAVA语言可以跨平台,而是在不同的平台都有可以让JAVA语言运行的环境。
程序从源码到运行:编码-编译-运行-调试。JAVA在编译阶段体现了跨平台的特性,即:首先,将Java源代码编译成.class文件字节码(第一次编译);.class通过JVM将Java字节码转化为目标机器可以运行的代码(第二次编译)。正是第二次编译中JVM的作用,为JAVA语言提供了在不同平台运行的效果。
和C/C++最大的不同点在于:C是面向操作系统的,需要开发者关注不同操作系统之间的差异性;而JAVA是通过虚拟机屏蔽了操作系统的底层细节。这也是“解耦”的思想。
1.1.2 垃圾收集
JAVA通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。
1.2 JAVA是解释执行吗?
JAVA不是编译机制,而是解释机制。
JVM类加载器加载.class文件字节码,通过解释器逐行解释执行,但是这种执行速度会相对比较慢。
针对高频使用的代码块(即热点代码),引进了即时编译(JIT Just-in-time compilation),提前将这类代码编译成本地机器码,可以直接执行。有点类似于“缓存”技术。
对一般的Java方法而言,编译后代码的大小相对于字节码的大小,膨胀比达到10x是很正常的。同上面说的时间开销一样,这里的空间开销也是,只有对执行频繁的代码才值得编译,如果把所有代码都编译则会显著增加代码所占空间,导致“代码爆炸”