Java学习笔记8
·
Java 的运行机制
1. Java 程序的运行过程是怎样的?
Java 源文件(.java)→ 编译生成字节码文件(.class)→ 由 JVM 加载执行 → 得到运行结果。
2. Java 是直接运行在操作系统上的吗?
不是。Java 程序运行在 Java 虚拟机(JVM)之上,由虚拟机负责与操作系统交互。
3. 虚拟机的好处是什么?
借助虚拟机,Java 可以实现「一次编写,到处运行」的跨平台能力。
4. 为什么要跨平台?
因为同一套代码无需修改,就能在任意操作系统上运行,从而降低开发与维护成本。
5. 内存与内存地址
- 内存:软件运行时用来临时存储数据的空间。
- 内存地址:内存中每一个小格子的编号。
- 作用:快速管理内存空间。
内存地址的规则
32 位操作系统:内存地址以 32 位二进制表示。
地址范围:
0000 0000 0000 0000 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111 1111 1111
即 2³² 个内存地址,共计 4,294,967,296 个。
最大支持内存:4,294,967,296 字节 = 4,194,304 KB = 4096 MB = 4 GB。
64 位操作系统:内存地址以 64 位二进制表示。
最大内存地址为 2⁶⁴,地址范围为 0 ~ 2⁶⁴。
最大支持内存:2⁶⁴ 字节 = 18,446,744,073,709,551,616 字节 ≈ 17,592,186 GB ≈ 17,179 TB。
6. Java 中的内存分配
JVM 在运行时会划分出若干内存区域,各自承担不同的职责:
- 栈内存:每个线程都拥有独立的栈。方法被调用时入栈执行,执行完毕后出栈;目前只需关注单个线程的栈即可。
- 堆内存:由所有线程共享,用于存储对象、数组以及字符串常量池(与
new关键字密切相关)。 - 方法区:JDK 7 中由永久代实现,JDK 8 及以后改由元空间实现,并从虚拟机内部移至本地内存;用于存储字节码信息、常量与静态变量。
- 本地方法栈:用于调用本地 Native 方法。
- 程序计数器:每个线程独立拥有,记录当前线程正在执行的字节码指令地址(行号)。
7. 总结
- Java 虚拟机把内存分成了哪几个部分?
栈、堆、方法区、本地方法栈、程序计数器。
- 栈、堆、方法区各自的作用是什么?
栈:存放方法调用;堆:存放 new 创建的对象;方法区:存放字节码文件相关信息。
- 基本数据类型在内存中的特点是什么?
变量中记录的是真实的数据,传递时传递的也是真实的数据。
- 引用数据类型在内存中的特点是什么?
变量中记录的是地址值,传递时传递的也是地址值。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)