从本科开始就一直用Java, 但是基本上只是使用IDE比如eclipse 进行敲代码而已, 然后编译、执行,程序跑通就行,但是随着学习的深入 ( 虽然还是很渣), 慢慢的想知道我们点击 编译、执行的时候,系统内部到底做了什么,今天我们就来看看是什么魔力让我们写的java 源代码 有了生命。
首先来了解下一些基本的概念。
JAR: jar 包, Java Archive, 就是对一些文本、图像等资源、.class 文件等的集成压缩包,用来给我们的Java 程序提供支持的文件。
JRE: Java Runtime Environment, 就是java程序的运行环境,包括JVM (java 虚拟机) + JARs + 其他文件。如下图
JDK: Java Development Kit, 就是Java 开发组建等。 包含 JRE 和 Compiler + Debugger等.
JVM : Java Virtual Machine. 对于JVM的每个组件。
1. ClassLoader: 1). 装载 .class 文件到内存中 2). 核实byte code 的操作这就是为什么说,java 程序相对安全,因为在装载byte code到内存中时,classloader的verifier会核实下这个code中有没有什么指令能对我们的系统产生伤害。3). 为程序分配内存.
2. Run time data area: JVM 运行程序时所使用的内存区域。
2.1 Method area: 存储class 代码和 method 代码
2.2 Heap: 对象在Heap(堆)中被创建
2.3 Java Stacks: 用来运行java 方法的frame. 方法在这里运行
2.4 Program counter registers: 用来存放指令的内存地址
2.5 Native Method Stacks: 用来运行 native language method 的地方.
native language: 不需要转换和解释,能直接在机器上运行的语言比如C
Managed language: 必须被转换和解释才能运行的语言比如Java
Dynamic language: python.
3. Native method interface: 是native method的接口, 用来连接native language libraries 和 JVM
4. Native method library: 存储native language 的libraries的信息
5. Execution Engine: 包含 解释器 和 JIT 编译器 - 转换byte code 到 machine code。
以上是了解java 程序开发与运行的知识储备。
Java Source Code< .java file> -------- Compiler -------> Java Byte Code< .class file> --------- JVM ------- 在JVM中由JIT Compiler 将Java Byte Code 转换成Machine Code然后运行 --------> result
有错误欢迎指出。