设为首页 加入收藏

TOP

《深入理解 Java 虚拟机 》学习笔记(二)
2018-12-08 16:08:49 】 浏览:349
Tags:《深入理解 Java 虚拟 学习 笔记
件的结构拥有固定的格式,包含两部分的数据:
  • 类的元数据。
  • 方法代码的字节流
  • code 属性表包含的属性
    • max_stack 存储操作数栈的最大深度值。运行时用来确定分配栈帧中所需的操作数栈深度。
    • max_locals 局部变量所需的最大空间大小
  • 符号引用
    • 类与接口的全限定名
    • 域的名称与描述符
    • 方法名与描述符
  • 该部分内容可以通过查表获得,不再赘述。
  • 第七章 虚拟机类加载机制

    类加载的过程

    1. 加载
    通过全类名获取该类的二进制字节流
    解析字节流,将字节流所表达的静态存储结构转化为方法区的运行时数据结构 (这是什么东西?)
    为该类创建一个 Class 对象,用来访问该类的类数据

    2. 连接

    • 验证

    为了确保加载的字节流时符合规范的,不会危害到虚拟机自身的安全。主要包括

    1. 文件格式验证
    2. 元数据验证
    3. 字节码验证
    4. 符号引用验证
    • 准备

    为类变量分配内存并进行初步初始化(0/null) // 不应该是在类加载阶段完成的么?

    • 解析

    将符号引用替换为直接引用

    3. 初始化

    • static fields and block init

    4. 使用
    5. 卸载

    类加载器

    一个加载器确定一个类的命名空间。同一个类由不同加载器加载后是不同的类。

    双亲委派:当需要加载一个类时先使用父类加载器(其实这个地方不是很准确,父子关系是通过复合来实现的),若失败了,再使用当前的加载器。如果自己写一个 Object 类,编译可通过但是由于双亲委派,它永远都不会被加载。

    第十章 早期(编译器)优化

    // TODO: 因本章含有相当多的编译原理相关概念,所以第十、十一章学习延后(预计第 8-9 周)

    前端编译过程(*.java --> *.class

    解析与填充符号表

    词法分析。将源代码转换为标记(Token) 的集合

    • Token: 是编译过程中的最小元素。例如关键字、变量名、运算符等等

    语法分析。通过 Token 序列将构造抽象语法树(Abstract syntax tree)

    参考

    1. 郑州大学姜志明老师课件
    2. 初探Java字符串 (非常好的一篇文章)
    3. Java HotSpot VM 参数
    4. Java HotSpot Virtual Machine Garbage Collection Tuning Guide
    5. JVM 垃圾回收器工作原理及使用实例介绍 — IBM
    6. Minor GC vs Major GC vs Full GC
    7. Abstract syntax tree
    8. 4.4 Symbol Tables
    首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇ImportNew一周资讯:新 GC 算法将.. 下一篇如何高效的使用 Git

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目