JVM 初识
JAVA 跨平台
- java 编译成 class 文件
- 不同操作系统有不同的 jre 环境,不同操作系统的 jre 都能读取同一份 class 文件
jre 包含 jvm,所以 java 跨平台是因为不同操作系统有对应的 jvm 实现的
JDK、JRE、JVM
-
JDK:Java Development Kit,开发 java 程序的完整套件,包含 JRE
-
JRE:Java Runtime Environment,运行 Java 应用程序所需的环境,包含 JVM
-
JVM:Java Virtual Machine,java 虚拟机,执行 java 程序
JDK 包罗万象,自己的电脑就安装 JDK 就好了,不用安装 JRE;如果是服务器,只需要运行 java 程序,只安装 JRE 就好了
Class 文件
- java 文件经过前端编译器(比如 javac)而来
- 包含魔数、Class文件版本、常量池等部分
- jvm 会读取 class 文件,并在内存中生成一个对应的 Class 实例
组成部分 | 作用 | 描述 |
---|---|---|
魔数 | 当前16 进制文件是否是一个合法的 java class 文件,在文件开头 | 一个合法的 class 文件开头是 ca fe ba be |
Class 文件版本 | 确定当前 class 文件是哪个版本的编译器编译的 jdk 向下兼容:1.8 编译的 class,1.7 就不能解释,1.9 可以 | 51 - jdk1.7 ,52 - jdk1.8 ,53 - jdk1.9 |
常量池 | 存放这个类的 所有具体信息,比如字符串常量,方法返回值,这个 class 文件 import 了哪些类等 | 可以理解为这个 class 文件的资源库 |
访问标识 | 访问修饰符 | |
类索引、父类索引、接口索引集合 | 当前类、父类和实现的所有接口 | |
字段表集合 | 成员变量信息 | 几个成员变量,类型等 |
方法表集合 | 方法信息 | 访问标识,方法体(编译后的),参数列表,返回值类型等 |
属性表集合 |
常量池:不仅仅是字符串常量,而是这个 class 文件的所有信息,比如成员变量的类型、方法的入参列表、方法的返回值类型、访问修饰符等等
字节码指令
-
Class 文件经过后端编译器编译而来,由操作数+操作码构成,根据用途大致分为 9 类,常见的指令系列比如 store、load、push、invoke 等
加载与存储、算术、类型转换、对象创建与访问、方法调用与返回、操作数栈管理、控制转移、异常处理、同步控制
-
最终的指令和 Class 字节码顺序可能不一样(指令重排),字节码指令是 CPU 能识别和调用的

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具