《解密java 虚拟机》笔记

  • Hotspot 由 C++ 写成。
  • java编译为 class,jvm 将 class 文件解析,在 C++层用oop-klass模型[oop,klass,handle]。
  • jvm 初始化的时候,将不同的字节码经由不用的汇编解释器转为不同的汇编代码,存储起来(模板解释器),并且在字节码对应的汇编代码后面添加取下条字节码的汇编。
  • 实例在 c++层对应instantOop, 类结构,方法结构等都有对应的 klass。
  • 常量池对应 constantPoolHandle,字段对应 typeArrayHandle,方法对应objArrayHandle,
    类的结构对应instantKlassHandle。
  • 在 jdk6下,无论是 oop 还是 klass,都封装为 oop存储。
  • java的多态依靠在instantKlass 中存储虚方法分发表。虚方法分发表首先将父类的分发表复制,然后扫描自身的方法,如果是重写方法,则将虚方法表中对应的父类的方法表的方法指针修改。
  • c++不知道 java 方法的参数,因此无法在编译时确定栈深,依靠栈的“寄生”,即在原来的栈中扩展,将方法参数变为参数首地址和参数个数压栈。
  • 栈帧由局部变量表(由函数入参和函数局部表组成),固定帧,操作数栈组成,其中局部变量表的函数入参部分属于调用栈帧,函数局部表属于 callee 的栈帧。
  • class 的解析重点是常量池(constantPoolKlass),字段表,方法表(methodKlass)
  • 内存进行内存对齐,其中 jvm 会进行字段重排,并且支持指针压缩。
  • jvm 会使用栈顶缓存策略,使得字节码对应的汇编会改变。

你可能感兴趣的:(《解密java 虚拟机》笔记)