Java的加载与执行
Java既是编译型语言又是解释型语言
question:为什么JVM可以跨平台执行
answer :
Java虚拟机(JVM)之所以能够跨平台执行,是因为它在不同操作系统上提供了一个统一的运行环境,实现了Java程序的平台无关性。以下是几个关键原因:字节码:Java源代码在编译时被编译器转换成字节码,而字节码是一种与具体平台无关的中间表示形式。这意味着Java程序不直接在特定平台上运行,而是运行在JVM上,JVM负责将字节码解释或编译成特定平台的机器码。
JVM实现:JVM的实现者根据不同的操作系统和硬件平台,开发了相应的JVM实现。这些实现负责在不同平台上提供与Java程序交互的接口,并将字节码转换为本地机器码。这样,只需要针对特定平台开发适当的JVM实现,就可以在该平台上执行Java程序。
JVM规范:Java虚拟机规范定义了JVM的行为和要求,包括字节码格式、内存模型、类加载机制、垃圾回收等。这个规范确保了不同的JVM实现遵循相同的规则,从而使得Java程序在不同的JVM上具有一致的行为。
运行时环境:JVM提供了一个独立于底层操作系统的运行时环境,它屏蔽了底层操作系统的差异性。JVM负责管理内存、线程、安全性等方面的任务,使得Java程序能够在不同平台上以相似的方式运行。
综上所述,JVM的跨平台执行能力是通过将Java程序编译为平台无关的字节码,并在不同平台上提供适当的JVM实现来实现的。这种设计使得Java程序可以在任何安装了相应JVM的操作系统上运行,提供了可移植性和平台无关性的优势。
编译阶段
.java --> 通过javac命令 --> .class
- .java : java程序员编写的java源代码
- javac : 专门负责编译,检查.java文件语法是否合法,如果不合法,会有错误提示
- .class : 字节码文件,编译成功的产物。只有JVM能理解该文件(字节码文件不是机器码文件(0101010))
java
java只是一个命令,通过这个命令可以运行java程序,只要它执行,JVM就启动了
运行阶段
JVM --> 操作系统 --> 硬件
在JVM中:
- 类加载器(classLoader)根据CLASSPATH环境变量找到.class文件并装载进去
- 加载class文件到内存
- 连接
- 初始化
- 执行
- 卸载
java加载与执行
需要注意的
- 包含两个阶段 : 编译阶段和运行阶段
- 编译阶段和运行阶段可以在不同的操作系统上完成
- 编译后删除java源程序,不会影响程序的执行
- 生成的class文件如果是A.class 则 类名为A
- javac是负责编译的命令
- java是负责运行的命令
- JVM会把class字节码解释为机器码,这样操作系统才能看懂
- JDK是什么
JDK(Java Development
Kit)是Java开发工具包,它是用于开发Java应用程序的软件包。JDK包含了开发和调试Java程序所需的工具、编译器、运行时环境和类库。JDK提供了以下主要组件:
编译器(javac):JDK中的编译器将Java源代码(扩展名为.java)编译为字节码文件(扩展名为.class),这些字节码文件可以在Java虚拟机(JVM)上运行。
Java运行时环境(JRE):JDK中包含了完整的JRE,用于在本地机器上执行Java应用程序。JRE包括Java虚拟机(JVM)和Java类库,它提供了Java程序运行所需的基本功能和API支持。
开发工具:JDK提供了一系列的开发工具,如调试器(jdb)、打包工具(jar)、文档生成工具(javadoc)等,用于开发、调试、打包和文档化Java应用程序。
类库:JDK包含了广泛的Java类库,提供了丰富的API和功能,包括集合框架、输入输出、网络编程、数据库访问、图形用户界面(GUI)等。这些类库可以帮助开发者更快速地开发Java应用程序。
除了上述组件,JDK还提供了各种工具、配置文件和示例代码,以帮助开发者更好地进行Java应用程序的开发和调试。
- JRE(Java Runtime Environment)是Java运行时环境,它是Java应用程序运行所需的最小环境。JRE包括Java虚拟机(JVM)和Java类库,用于解释和执行Java字节码,并提供Java应用程序运行所需的基本功能和API支持。