写点什么

JVM 学习笔记

作者:Changing Lin
  • 2021 年 12 月 18 日
  • 本文字数:528 字

    阅读完需:约 2 分钟

1.jdk, jre, jvm 的区别

1.1 javac 编译步骤

  • 词法分析

  • 语法分析

  • 语义分析

  • 中间代码的生成

  • 目标代码的生成

  • 出错的处理

2.class 文件格式解读

  • cafe babe

  • u4 代表 8 个 16 进制,表示 4 个字节

  • u2 代表 2 个 16 进制,表示 2 个字节

3. jvm 加载 class 文件的三个阶段

3.1 装载(Loading):

  • 查找 class 文件,ClassLoader.loadClass(),根据全称进行加载,得到二进制流数据

  • 将二进制数据进行读取:类的描述信息(时间、作者、版本等)(保存在方法区)

  • 存储 class 对象,比如 Bean 对象 (存储在堆区)

  • 装载也有验证的过程

3.2 链接 Linking:获取类或接口并将其组合到 Java 虚拟机的运行时代以便可以执行的过程。

验证被加载类的正确性,分配新的数据结构
复制代码
  • 验证:确保二进制结构是对的

  • 准备:创建静态字段:public static int FLAG = 1;

  • 解析:将类的符号转换为直接引用

3.3 初始化:对类的静态变量,和静态代码块进行初始化

  • Bootstrap 加载 java_home 所有 class

  • extension 加载 java 拓展 jar 包

  • app 加载 classpath 中指定的 jar

  • custom 加载自行决定的 jar 文件或 class

  • 双亲委派模型:

  • 虚拟机栈:

  • 栈帧(1 个方法对应一个栈帧):局部变量表,操作数栈,动态链接,正常/错误的返回(返回地址)

  • javap

  • 动态加载

4.

JVM 所管理的内存分为以下几个运行时数据区:程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区。


发布于: 1 小时前阅读数: 3
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论

发布
暂无评论
JVM学习笔记