博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的类加载机制 为什么会出现锁机制?
阅读量:6819 次
发布时间:2019-06-26

本文共 683 字,大约阅读时间需要 2 分钟。

  hot3.png

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

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

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

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

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

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

为什么会出现锁机制?

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

转载于:https://my.oschina.net/134596/blog/1641261

你可能感兴趣的文章
make: *** linux-2.6.36.4/arch/arm: Is a directo...
查看>>
android http连接阻塞超时问题
查看>>
异常处理
查看>>
线性插值针对位置量和角度量
查看>>
关于方法快的理解
查看>>
sublime text2配置
查看>>
library 'system/lib/libhoudini.so' not find
查看>>
TCP UDP socket debug tools
查看>>
网页矢量图在组态软件中的应用
查看>>
disabled by the php.ini setting phar.readonly
查看>>
mysql远程连接
查看>>
application 启动多次
查看>>
在Array原型链上扩展remove,contain等方法所遇到的坑
查看>>
快排class
查看>>
列出文件和目录
查看>>
字典功能的简单实现
查看>>
Mac OS X 下搭建 Java 开发环境图解
查看>>
JBPM4或Activiti5的流程任务分发与汇总
查看>>
android4.0 在ubuntu10.04(64位)上的下载与编译
查看>>
记一次在 Linux 上创建 Django 应用的过程
查看>>