黑马JVM总结(三十)

(1)类加载-连接-解析

new对象,会触发对象的解析和初始化 

通过类加载器加载类C,这里只会进行类C的加载并不会导致类C的解析以及初始化,这样加载类C的时候类D也不会解析跟初始化

黑马JVM总结(三十)_第1张图片

 黑马JVM总结(三十)_第2张图片

通过jps找到进程id:黑马JVM总结(三十)_第3张图片

打开进程工具 

黑马JVM总结(三十)_第4张图片

黑马JVM总结(三十)_第5张图片

可以看到类C在虚拟机里

黑马JVM总结(三十)_第6张图片

黑马JVM总结(三十)_第7张图片

使用new 关键字,这样类D也加载了

黑马JVM总结(三十)_第8张图片

解析:也就是将常量池中的符号引用解析为直接引用,符号引用仅仅是符号,并不知道类啊,方法,属性并不知道这些符号在内存的那个位置,经过解析以后,变成了这种直接引用,就能够确切的知道类啊,方法啊在内存中的位置了

(2)类加载-初始化

初始化阶段呢实际上去执行类的构造方法,cinit方法阶段 

黑马JVM总结(三十)_第9张图片

黑马JVM总结(三十)_第10张图片 

黑马JVM总结(三十)_第11张图片 黑马JVM总结(三十)_第12张图片

黑马JVM总结(三十)_第13张图片

(3)类加载-练习1

黑马JVM总结(三十)_第14张图片

 a和b是基本类型,属于静态常量,他们都是在类连接的准备阶段进行赋值的并不会导致类的初始化,所以访问E不会别初始化,c是包装类不会在准别阶段完成赋值,在初始化会完成导致类的初始化黑马JVM总结(三十)_第15张图片

黑马JVM总结(三十)_第16张图片

(4)类加载-练习2

黑马JVM总结(三十)_第17张图片

黑马JVM总结(三十)_第18张图片 

只有用到LazyHolder的时候才会触发加载,连接,跟初始化 

黑马JVM总结(三十)_第19张图片

黑马JVM总结(三十)_第20张图片

 黑马JVM总结(三十)_第21张图片

你可能感兴趣的:(JVM虚拟机,jvm)