类加载检查 -> 分配内存 -> 初始化零值 -> 设置对象头 -> 执行 init 方法。html
jps -l
。jstat -gcutil <pid>
。jinfo -flags <pid>
。jmap -dump:format=b,file=<filename> <pid>
。jhat <filename>
。jstack -l <pid>
。类型 | 名称 | 数量 |
---|---|---|
u4 | magic(魔数) | 1 |
u2 | minor_version(次版本号) | 1 |
u2 | major_version(主版本号) | 1 |
u2 | constant_pool_count(常量池容量计数器) | 1 |
cp_info | constant_pool(常量池) | constant_pool_count - 1 |
u2 | access_flags(访问标志) | 1 |
u2 | this_class(类索引) | 1 |
u2 | super_class(父类索引) | 1 |
u2 | interfaces_count(接口计数器) | 1 |
u2 | interfaces(接口索引集合) | interfaces_count |
u2 | fields_count(字段表计数器) | 1 |
field_info | fields(字段表集合) | fields_count |
u2 | methods_count(方法表计数器) | 1 |
method_info | methods(方法表集合) | methods_count |
u2 | attributes_count(属性表计数器) | 1 |
attribute_info | attributes(属性表集合) | attributes_count |
加载 -> 链接(验证、准备、解析) -> 初始化。java
若是一个类加载器收到类加载的请求,它会先把这个请求委派给父加载器去完成,而不会本身去尝试加载这个类。只有父加载器没法完成这个加载请求时,子加载器才会尝试本身去加载。程序员
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧存储了方法的局部变量表、操做数栈、动态链接、方法返回地址和一些额外的附加信息。每个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程。算法
方法调用并不等于方法执行,方法调用阶段惟一的任务就是肯定被调用方法的版本(即调用哪个方法)。此时,在 Class 文件里存储的只是符号引用,而不是直接引用,只有在类加载期间,甚至是运行期间才能肯定目标方法的直接引用。数组
在编译期间对注解进行处理。能够读取、修改、添加抽象语法树中的任何元素。安全
分层编译根据编译器编译、优化的规模与耗时,划分出不一样的编译层次。微信
判断一段代码是否是热点代码,是否是须要触发即时编译,这样的行为称为热点探测。数据结构
HotSpot 虚拟机使用的是基于计数器的热点探测方法,它为每一个方法准备了两类计数器。多线程
Java 使用的线程调度方式就是抢占式调度。并发
按线程安全的“安全程度”由强至弱排序,能够将多个线程的共享数据分为 5 类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。
《深刻理解 Java 虚拟机》读书笔记:Java 内存区域与内存溢出异常
《深刻理解 Java 虚拟机》读书笔记:垃圾收集器与内存分配策略
《深刻理解 Java 虚拟机》读书笔记:虚拟机性能监控与故障处理工具
《深刻理解 Java 虚拟机》读书笔记:类文件结构
《深刻理解 Java 虚拟机》读书笔记:虚拟机类加载机制
《深刻理解 Java 虚拟机》读书笔记:虚拟机字节码执行引擎
《深刻理解 Java 虚拟机》读书笔记:早期(编译期)优化
《深刻理解 Java 虚拟机》读书笔记:晚期(运行期)优化
《深刻理解 Java 虚拟机》读书笔记:Java 内存模型与线程
《深刻理解 Java 虚拟机》读书笔记:线程安全与锁优化
微信公众号:惊却一目
我的博客:惊却一目