甜野猫|清华大佬力荐的JVM学习路线+实战笔记+阿里真题,吃透吊打面试官
JVM知识点梳理JVM是Java Virtual Machine(Java虚拟机)的缩写 , JVM是一种用于计算设备的规范 , 它是一个虚构出来的计算机 , 是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。 Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域 。JVM屏蔽了与具体操作系统平台相关的信息 , 使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行 。 JVM在执行字节码时 , 实际上最终还是把字节码解释成具体平台上的机器指令执行 。
JVM 组成部分
如上面的架构图所示 , JVM分为三个主要子系统:
- Class Loader子系统
- 运行时数据区
- 执行引擎
加载
类将由此组件加载 。 BootStrap ClassLoader , 扩展ClassLoader和Application ClassLoader是有助于实现该目标的三个ClassLoader 。
- BootStrap ClassLoader :负责从引导类路径中加载类 , 仅用于rt.jar 。 最高优先级将给予此加载程序 。
- 扩展ClassLoader :负责加载ext文件夹(jre \ lib)内的类 。
- Application ClassLoader :负责加载应用程序级别的类路径 , 提到的环境变量路径等 。
- 验证:字节码验证程序将验证生成的字节码是否正确 , 如果验证失败 , 我们将收到验证错误 。
- 准备:将为所有静态变量分配内存并为其分配默认值 。
- 解决:将所有符号内存引用替换为“方法区域”中的原始引用 。
【甜野猫|清华大佬力荐的JVM学习路线+实战笔记+阿里真题,吃透吊打面试官】这是ClassLoading的最后阶段;在此 , 所有静态变量将被分配原始值 , 并且将执行静态块 。
运行时数据区运行时数据区分为五个主要部分:
1、方法区域 :所有类级别的数据(包括静态变量)都将存储在此处 。 每个JVM只有一个方法区域 , 它是共享资源 。
2、堆区 :所有对象及其对应的实例变量和数组将存储在此处 。 每个JVM还有一个堆区 。 由于“方法”和“堆”区域共享多个线程的内存 , 因此存储的数据不是线程安全的 。
3、堆栈区 :对于每个线程 , 将创建一个单独的运行时堆栈 。 对于每个方法调用 , 将在堆栈存储器中创建一个条目 , 称为堆栈帧 。 所有局部变量都将在堆栈存储器中创建 。 堆栈区域不是共享资源 , 因此是线程安全的 。 堆栈框架分为三个子实体:
- 局部变量数组——与该方法有关 , 涉及多少局部变量 , 并且相应的值将存储在此处 。
- 操作数堆栈——如果需要执行任何中间操作 , 则操作数堆栈充当执行该操作的运行时工作区 。
- 帧数据——与该方法相对应的所有符号都存储在此处 。 在任何例外情况下 , 捕获块信息将保留在帧数据中 。
5、本机方法堆栈 :本机方法堆栈保存本机方法信息 。 对于每个线程 , 将创建一个单独的本机方法堆栈 。
执行引擎分配给运行时数据区的字节码将由执行引擎执行 。 执行引擎读取字节码并逐段执行 。
1、解释器:解释器解释字节码的速度较快 , 但执行速度较慢 。 解释器的缺点是 , 当多次调用一种方法时 , 每次都需要新的解释 。
推荐阅读
- 公司|时间过半!华大基因:股东和玉高林和高林同创未减持股份
- 清华大学|清华副校长直言:80%考上清华的高考状元,去哪了?一般人不知道
- 燕赵晚报|石家庄一辆货车从中华大街高架桥坠落,床板散落一地
- 石家庄一辆货车从中华大街高架桥坠落,床板散落一地
- 新华网|专访:数字贸易为卢中经贸合作打开新局面——访卢旺达驻华大使基莫尼奥
- 清华大学|2020高考三大热门专业出炉,西科大成最大黑马,实力不输清华
- |下属单位建30亿豪华大楼,中国最赚钱的企业:一年利税1.2万亿
- |中国最赚钱的企业:一年利税1.2万亿,下属单位建30亿豪华大楼
- 甜野猫|新进展!SpaceX星链卫星再添60颗 下载速度超100Mb/s
- 清华大学|男子为了考清华大学,复读了8年终于如愿,今已从业,他后悔吗?
