logo头像

Always believe youself.

JVM-6

类加载器阶段

  • 加载
  • 链接
  • 初始化

加载

image.png

先找到 instanceKlass 再找到 Person.class

连接

  • 验证 :验证类是否符合 JVM 规范,安全性检查。
  • 准备 :为 static 变量分配空间,设置默认值。

image.png

  • 解析 :将常量池中的符号引用解析为直接引用。

初始化

  • 初始化 即 调用 <cinit>()v 方法,虚拟机会保证这个类的【构造方法】 的线程安全。

image.png

懒汉模式:

image.png

静态代码块在初始化过程中,类加载器保证了它的线程安全性。

类加载器

  • 启动类加载器
  • 扩展类加载器

image.png

  • 双亲委派的类加载模式。

image.png

  • 线程上下文类加载器
  • 自定义类加载器

运行期优化

编译分层

image.png

【逃逸分析】:如部分代码局部变量创建后不会被使用,在多次执行代码块后,会进行优化,不再进行创建。 这个也是有开关可以控制。

方法内联 (inline)

发现某个方法是热点方法,并且长度不太长时,会进行内联。所谓内联局势把方法内代码拷贝,粘贴到调用者的位置。

字段优化

反射优化