class文件结构
- MagicNumber:文件类型
- Minor Version:小版本标识
- Major Version:大版本号
- constant_pool_count:常量池数量
- constant_poo:常量池具体实现
- access_flags:class文件修饰符
- this_class:当前类名
- super_class:父类名
- interfaces_count:实现接口数
- interfaces:实现接口
- fields_count:字段数
- fields:具体字段
- methods_count:方法数
- methods:具体方法
- attributes_count -u2:其他属性数
- attributes:其他属性具体实现
javap命令
JBE 可以直接修改
jClasslib
类加载与初始化
-
Loading
-
双亲委派机制,主要出于安全来考虑。先自Custom ClassLoad向上检查该类是否已经加载,已经加载则返回,如果直到Bootstrap也未查找到内存中有加载,则自顶向下加载,加载完成则返回。
-
LazyLoading五中情况
-
ClassLoader
findInCache:先在内存中查找是否加载,已加载则返回,否则去parent.LoadClass中继续先查找内存中是否加载过此类,否则继续去parent.LoadClass直到最高级,如果还是没有找到则从顶级开始findClass加载类到内存。
-
-
Linking
-
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。