微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM虚拟机1

class文件结构

  1. MagicNumber:文件类型
  2. Minor Version:小版本标识
  3. Major Version:大版本号
  4. constant_pool_count:常量池数量
  5. constant_poo:常量池具体实现
  6. access_flags:class文件修饰符
  7. this_class:当前类名
  8. super_class:父类
  9. interfaces_count:实现接口数
  10. interfaces:实现接口
  11. fields_count:字段数
  12. fields:具体字段
  13. methods_count:方法
  14. methods:具体方法
  15. attributes_count -u2:其他属性
  16. attributes:其他属性具体实现

javap命令

JBE 可以直接修改

jClasslib

类加载与初始化

  1. Loading

    1. 双亲委派机制,主要出于安全来考虑。先自Custom ClassLoad向上检查该类是否已经加载,已经加载则返回,如果直到Bootstrap也未查找到内存中有加载,则自顶向下加载,加载完成则返回。

      • Bootstrap:加载lib/rt.jar charset.jar等核心类,C++实现
      • Extension:加载扩展jar包 jre/lib/ext/*.jar或由-Djava.ext.dirs指定
      • App:加载classpath指定内容
      • Custom ClassLoad:自定义ClassLoad
    2. LazyLoading五中情况

      • new getstatic putstatic invokestatic指令,访问final变量除外
      • java.lang.reflect对类进行反射调用
      • 初始化子类的时候,父类首先初始化
      • 虚拟机启动时,被执行的主类必须初始化
      • 动态语言支持java.lang.invoke.MethodHandle解析的结果为REF_getstatic REF_putstatic REF_invokestatic的方法句柄时,该类必须初始化
    3. ClassLoader

      findInCache:先在内存中查找是否加载,已加载则返回,否则去parent.LoadClass中继续先查找内存中是否加载过此类,否则继续去parent.LoadClass直到最高级,如果还是没有找到则从顶级开始findClass加载类到内存。

  2. Linking

    • Verification:验证文件是否符合JVM规定
    • Preparation:静态成员变量赋认值
    • Resolution:将类、方法属性等符号引用解析为直接引用,常量池中的各种符号引用解析为指针、偏移量等内存地址的直接引用
  3. Initializing

    调用类初始化代码,给静态成员变量赋初始值

对象在内存中的存储布局

  • 对象头:markword 8个字节
  • Classpointer指针:-XX:+UseCompressedClasspointers 为4个字节,不开启为8个字节
  • 实例数据:引用类型(如String)-XX:+UseCompressedOops 为4个字节,不开启为8个字节
  • Padding:对齐为8的倍数

对象头(64位)

锁状态 31bit 4bit 1bit(是否偏向锁) 2bit(锁标志位) 26bit
无锁态 对象的hashCode 分代年龄 0 01 unused
轻量级锁 指向栈中锁记录的指针 00
重量级锁 指向互斥量(重量级锁)的指针 10
GC标记 11
偏向锁 线程ID Epoch、分代年龄 1 01

混合模式

解释器+JIT

  • 混合使用解释器 + 热点代码编译
  • 起始阶段采用解释执行
  • 热点代码检测
    • 多次被调用方法方法计数器:检测方法执行频率)
    • 多次被调用的循环(循环计数器:检测循环执行频率)
    • 进行编译
    • -Xmixed认为混合模式,开始解释执行,启动速度较快,对热点代码实行检测和编译
    • -Xint使用解释模式,启动很快,执行较慢
    • -Xcomp使用纯编译模式,执行很快,启动很慢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐