字节码文件:不包含硬件信息,完全与硬件平台无关,因此,无法直接由操作系统来运行。
Java应用程序的执行过程:代码装入、代码检验、代码执行。
1、代码装入:由类装配器完成,装入程序运行时所需的所有源代码(包含调用到的其他类),装入后该类被放在自己的命名空间。此时该类对其他类不再依赖,运行系统可以根据这些类,确定运行程序的内存布局;
2、代码检验:由字节码验证器进行安全检查,确保字节码正确无误;
3、代码执行:执行方式有两种。一是解析执行方式,通过“解释器”,将字节码翻译为要求平台的机器码,然后,传送到“运行支持器”的机器码被其送往硬件进行执行。执行过程一边编译,一边执行,称为解释执行。Java一般都采用这种方式;二是即使编译方式:代码生成器可以将字节码一次性的全部编译为适用于要求硬件平台的机器码,最后送往硬件进行执行。针对于对速度要求很高的程序,Java采用这种方式。
Java虚拟机(JVM):虚拟软件平台。为了能让编译生成的字节码更好的解释执行,通常将其划分为6个功能模块:JVM解释器、指令系统、寄存器、栈、存储区和碎片回收区。
JVM解释器:字节码转换成CPU执行的机器指令;
指令系统:与硬件计算机相似;
寄存器:4个常用的32位寄存器:pc(程序计数器)、optop(操作数栈顶指针)、frame(当前执行环境指针)、vars(执行第一个局部变量的指针);
栈:JVM栈是指令执行时数据和信息存储的场所和控制中心,它提供给JVM解释器运算所需的信息;
存储区:JVM存储区用于存储编译后的字节码信息,提供处理的原料;
碎片会收取:将使用后的Java类的具体实例从内存中进行回收,实现自动化释放内存。
JVM的运用让Java实现了“一次编译,处处运行”,它是整个运行系统的核心。
JDK:是Sun公司房补的免费的Java开发工具,有三个成员:J2EE、J2SE、J2ME;
J2EE:用于可扩展的企业级应用Java 2平台之上;
J2SE:用于工作站和PC机的Java标准平台之上;
J2SE:用于嵌入式消费电子平台之上。
若按其运行的操作系统划分:JDK分别有for Windows、for Linux、for Solaris和MacOS等不同版本。(JDK自身向下兼容)