jvm_01

前解:
java代码编译成class文件的: 编译过程
包括以下几个步骤:
a、词法分析(Lexical Analysis):将源代码字符串分解成有意义的单元,如标识符、关键字等。
b、语法分析(Syntax Analysis):检查这些单元是否按照语言的语法规则组成了正确的语句和结构。
c、语义分析(Semantic Analysis):检查程序中使用的数据类型是否正确,例如变量是否已声明等。
d、中间代码生成(Intermediate Code Generation):将源代码转换为一种中间表示形式,通常是抽象语法树(AST)。
e、优化(Optimization):对中间代码进行优化,以提高代码的执行效率。
f、字节码生成(Bytecode Generation):将优化后的中间代码转换为JVM可以执行的字节码。

1、整体组成部分
1.1、类加载器(ClassLoader)
1.2、运行时数据区(Runtime Data Area)
1.3、执行引擎(Execution Engine)
1.4、本地库接口(Native Interface)


2、整体运行流程
程序在执行之前先要把 java 代码转换成字节码(class 文件),jvm 首先需要把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载
到内存中的运行时数据区(Runtime Data Area);
而字节码文件是 jvm 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器 执行引擎(Execution Engine) 将
字节码翻译成底层系统指令再交由CPU 去执行,而这个过程中需要调用其他语言的接口 本地库接口(Native Interface) 来实现整个程序的功能,这
就是这 4 个主要组成部分的职责与功能。
而我们通常所说的JVM组成指的是运行时数据区(Runtime Data Area),因为通常需要程序员调试分析的区域就是“运行时数据区”,或者更
具体的来说就是“运行时数据区”里面的 Heap(堆)模块。
3、类加载子系统

类加载子系统负责从文件系统或者网络中加载class文件。classLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine
决定。 加载的类信息存放于一块称为方法区的内存空间。

class file 存在于硬盘上,可以理解为设计师画在纸上的模板,而最终这个模板在执行的时候是要加载 JVM 当中来,根据这个模板实例化出 n 个实
例,class file 加载到 JVM 中,被称为 DNA 元数据模板. 此过程就要有一个运输工具(类加载器 Class Loader),扮演一个快递员的角色。

posted @ 2025-04-09 09:33  黑影五  阅读(11)  评论(0)    收藏  举报