谈谈对 Java 平台的理解
Java 本身是一种面向对象的语言,最显著的特性有两个方面:
- “书写一次,到处行”(Write once, run anywhere),即跨平台特性,并不是说Java语言可以跨平台,而是在不同的平台都有可以让 Java 语言运行的环境而已(.class文件——字节码文件就是可以到处运行的文件);
- 垃圾收集(GC, Garbage Collection),Java 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。
“Java 是解释执行”,这句话正确吗?
对于“Java 是解释执行”这句话,这个说法不太准确。我们开发的 Java 的源代码,首先通过 Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚机拟(JVM)内嵌的解释器将字节码转换成为最终的机器码。但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了。
在运行时,JVM 会通过类加载器(Class-Loader)加载字节码,解释或者编译执行。