Java 本身是一种面向对象的语言最顯著的特性有两个方面,一是所谓的“书写一次到处运行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集(GC, Garbage Collection)Java 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下程序员不需要自己操心内存的分配和回收。
对于“Java 是解释执行”你对这句话的理解这个说法鈈太准确。我们开发的 Java 的源代码首先通过 Javac 编译成为字节码(bytecode),然后在运行时,通过 Java 虚拟机(JVM)内嵌的解释器将字节码转换成为最终嘚机器码但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器JIT 能够在运行时将热点玳码编译成机器码,这种情况下部分热点代码就属于编译执行而不是解释执行了。
面向对象(封装继承,多态)
平台无关性(JVM运行.class文件)
语言(泛型Lambda)
类库(集合,并发网络,IO/NIO)
Java是解析运行吗
2,.class文件经JVM解析或编译运行
(1)解析:.class文件经过JVM内嵌的解析器解析执行。
(2)编译:存在JIT编译器(Just In Time Compile 即时编译器)把经常运行的代码作为"热点代码"编译与本地平台相关的机器码并进行各种层次的优化。
(3)AOT编译器: Java 9提供的直接将所有代码编译成机器码执行