Java运行机制
高级语言的运行机制
我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。
翻译,其实翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
编译型语言(c,c++)
使用专门的编译器对源程序一次性 "翻译"成 特定平台的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式。
优点: 运行效率较高
缺点:编译生成的程序无法移植
解释性语言(javascript,ruby,python)
使用专门的解释器对源程序逐行" 翻译"成特定平台的机器码并立即执行的语言。
优点:跨平台较容易
缺点:效率较低,不能脱离解释器独立运行
java的运行机制
java是编译型语言与解释型语言的结合体
Java 运行 具有 编译型 和 解释型 特点
①首先采用通用的java编译器将java源程序编译成为与平台无关的字节码文件(class文件)
②然后由java虚拟机(JVM)对字节码文件解释执行。
JVM(Java Virtual Machine Java虚拟机)
JVM负责将每一条要执行的 Java 字节码送给解释器,解释器再将其翻译成特定平台环境的机器指令并执行
-
JVM是Java字节码执行的引擎,为java程序的执行提供必要的支持,还能优化java字节码,使之能转换成效率更高的机器指令。
-
程序员编写的程序最终都要在JVM上执行,JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的。
-
ClassLoader是java运行时一个重要的系统组件,是负责在运行时查找和装入类文件的类。
-
不同平台对应着不同的JVM,在执行字节码时,JVM负责将每一条要执行的 Java 字节码送给解释器,解释器再将其翻译成特定平台环境的机器指令并执行。
-
java语言最重要的特点就是跨平台运行,使用JVM就是为了支持与操作系统无关,实现跨平台运行。
ClassLoader
ClassLoader 是 JVM 实现的一部分,包括:
-
bootstrapclassloader(启动类加载器)用来加载java核心的API
-
ExtClassLoader,用来加载java的扩展API,也就是lib\ext类
-
AppClassLoader,用来加载用户机器上CLASSPATH设置目录中的Class
ClassLoader加载流程:
当运行一个程序的时候,JVM启动,
-
运行bootstrapclassloader,该ClassLoader加载java核心API,
-
然后调用ExtClassLoader加载扩展API,
-
最后AppClassLoader加载CLASSPATH目录下定义的Class.