java平台无关性的理解

Java本身是面向对象的语言,最显著的两个特征:

  1. 一次编译,到处运行,跨平台能力。
  2. 垃圾回收机制,程序员不需要自己操心内存的分配回收。

我们开发的java源代码,首先通过javac编译成为字节码,然后再运行时,通过虚拟机内嵌的解释器,将字节码转化为最终的机器码。Java通常分为编译期和运行期。Java的编译实际上是把java源码编译为.Class的字节码,而不是可以直接执行的机器代码。运行时,jvm通过类加载器,加载字节代码,解释或编译运行。Jdk8实际上是编译解释混合的一种模式。

Java的跨平台性与jvm密不可分,其实并不是java可以跨平台,而是不同的平台都有可以让java语言运行的环境而已。不同版本jvm相当对在不同平台为java运行准备的适配器而已

 

关于java的运行,有一个误区,java并不是解释运行的:

Java源代码经过javac编译成.class文件

.class文件经过虚拟机解析或编译运行

编译器:

  1. 存在JIT编译器,把经常运行的代码作为热点代码编译与本地平台的机器代码,并进行各层次的优化。运行时发生的。

     2. AOT编译器:java9提供的直接将所有代码编译成机器代码运行。编译时发生得。

你可能感兴趣的:(java基础)