Java的类加载机制 为什么会出现锁机制?

类从加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。 其中类加载的过程包括加载,验证,准备,解析,初始化五个阶段。

1.加载。在加载阶段,虚拟机需要完成以下三件事情:(1).通过一个类的全限定名来获取其定义的二进制字节流。(2).将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。(3).在Java堆中生成一个代表这个类的java.lang.Class,作为方法区中这些数据的访问入口。

2.验证。为了验证Class文件中的字节流符合Java虚拟机的规范,包括文件格式,元数据验证等。

3.准备。为类变量分配内存并设置类变量初始值,分配的内存在方法区中。

4.解析。将常量池中的符号引用转换为直接引用的过程。

5.初始化。该阶段才会真正的开始执行类种定义Java代码。初始化时执行类构造器clinit方法的过程,该方法由编译器自动收集类中所有类变量的赋值动作和静态语句块中的语句合并产生的。且保证子类的cliniit调用之前会先执行父类的clinit方法,接口除外,接口的实现类执行clinit方法时不会执行接口的clinit方法。clinit方法可以不存在,比如没有静态的语句块和类变量。

为什么会出现锁机制?

Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据出现不正确的结果,相互之间产生冲突,因此加入锁保证了该变量的唯一性和准确性。

猜你喜欢

转载自my.oschina.net/134596/blog/1641261