java的运行机制
Java程序的运行机制分为三个步骤:编写、编译和运行。
1.写
编写是指在Java开发环境中编辑程序代码,最终生成后缀为“.java”的Java源文件。
2.编译
编译是指使用Java编译器对源文件进行故障排除的过程。编译后会生成后缀为.class的字节码文件,可以被Java虚拟机(JVM)的解释器正常读取。
3.运行
运行是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。 字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。
Java运行过程
从编写好的Java源文件,到编译成字节码文件,再到通过JVM执行程序,再将程序的运行结果显示给用户,这就是一个完整的Java运行过程。
JVM
JVM(Java虚拟机Java虚拟机)
(1)JVM是Java字节码执行的引擎。它为Java程序的执行提供必要的支持。它还可以优化Java字节码并将其转换为更高效的机器指令。程序员编写的程序最终都会在JVM上执行。 JVM中类的加载是由类加载器(ClassLoader)及其子类来实现的。
(2)ClassLoader是Java运行时的重要系统组件,负责在运行时查找并加载类文件中的类。
(3)JVM屏蔽了与特定操作系统平台相关的信息,从而实现Java程序只需生成在JVM上运行的字节码文件(类文件),无需修改即可在多个平台上运行。不同的平台对应不同的JVM。在执行字节码时,JVM负责将每个要执行的字节码发送给解释器,然后解释器将其翻译成特定平台环境的机器指令并执行。 Java语言最重要的特点是跨平台运行。使用JVM的目的是为了支持跨平台运行,与操作系统无关。
ClassLoader
(1)是JVM实现的一部分,包括bootstrapclassloader(启动类加载器)
(2)ClassLoader在JVM运行时加载Java核心API,通过Java程序实现两个ClassLoader:
-
ExtClassLoader,它的作用是加载Java的扩展API,即lib\ext类;
-
AppClassLoader用于加载用户机器上CLASSPATH设置目录中的Class。
(3)ClassLoader加载过程:运行程序时,JVM启动并运行引导类加载器。 ClassLoader加载java核心API,然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录中定义的Class。
JRE
JRE是JavaRuntimeEnvironment,java运行时环境。它是运行java程序所必需的环境的集合。主要由java虚拟机、java平台核心类和几个支持文件组成。它不包括开发工具、编译器、调试器和其他工具。
当执行java程序时,操作系统会按照以下顺序搜索JRE环境。
(1)首先检查当前目录下是否有JRE
(2)检查父目录是否有JRE
(3)然后在环境变量PATH指定的路径中搜索JRE
(4) 检查注册表,查看CurrentVersion键值指向哪个JRE。
JRE自带的基础类库主要在JRE\LIB\rt.jar文件中。程序运行时,JRE ClassLoader负责查找并加载程序引用的基类库和其他类库。对于基础类库,ClassLoader会自动去rt.jar所在位置;对于其他类库,ClassLoader会在环境变量CLASSPATH指定的路径中搜索。
JDK
JDK是Java Development Kit,简称java开发工具包。
JDK是java的核心。它包括一个java运行环境、一堆java工具和java基础类库(rt.jar)。
JDK除了包含JRE的全部内容外,还包含供开发人员编译、调试和运行Java程序的工具。
JDK、JRE和JVM之间的关系:
高级语言的运行机制
我们都使用高级语言进行编程。计算机不能直接理解高级语言,只能理解并运行机器语言。因此,必须将高级语言翻译成机器语言,以便计算机可以运行用高级语言编写的程序。
翻译,其实翻译有两种方式,一种是编译,一种是解释。两种方法之间的唯一区别是翻译时间。