目录
类加载器的功能
上一节我们讲过了.java格式的文件会转换成.class格式。而.class格式需要通过类加载器才能进入到JVM中。下面以HelloWorld为例,讲解下类加载器的功能和作用。
类加载器有七大功能:
<1>加载
加载很好理解,就是把代码加载到“类加载器”中。
<2>验证
验证有两个作用。一是验证class文件的版本能不能兼容到当前JVM的版本中;二是验证class文件是否满足jvm规范(class的第一个字节码是否为16进制)
<3>准备
指的是把类成员初始化为初始值。例如public static int a = 100;准备工作是先新建一个变量a,设置它的初始值为0。【final的类变量除外,final变量会直接初始化为变量值】
<4>解析
将符号引用解析为直接引用。例如上面的public static int a = 100;解析这一步把a转换为内存地址,进制的形式。
<5>初始化
把我们定义的static变量或者static静态代码按顺序组织成类构造器形式来初始化变量。对于public static int a = 100;初始化把100赋给a。
.
<6>使用
在堆内存中创建对象执行。其顺序分为两部分,一是加载实例信息进入开辟的内存中(执行普通代码块);二是执行构造方法<init>方法
<7>卸载
程序执行完毕,需要移除程序时
分解JVM
-
class文件进入JVM后保存在方法区中
-
堆内存可供多线程共享使用
-
每个线程都有自己的栈区域