技术点-类加载器-理解

来源:互联网 发布:手机恶作剧软件骑马 编辑:程序博客网 时间:2024/06/13 19:36

类加载器

1,JVM中几个比较重要的内存区域,还有其他区域,这几个区域在类的的生命周期中扮演着比较重要的角色。
方法区:存放类信息,常量,静态变量,方法代码。

常量池:常量,类中的符号引用。

堆:用来存放类的实例对象。

栈:先进后出,存放代码运行时产生的临时变量,局部变量,方法出口等。并且本身通过栈帧存放数据,当方法调用完成后,栈帧消失。

2,java类的生命周期
-指的是一个class文件从加载到卸载的全过程。
-具体指5个阶段:加载-连接-初始化-使用-卸载
-也有可能直接跳过初始化

3,类加载器执行的三部分
加载:查找并加载类的字节码文件。

连接
-验证:确保被加载类的正确性。
-准备:给类的静态变量分配内存,并将其初始化为默认值。
-解析:把类中的符号引用转换为直接引用。

初始化:为类的静态变量赋予正确的初始化值。
-分为两个部分
1,静态变量的初始化
2,静态代码块的初始化
这i两种初始化统一归为静态变量的初始化。

4,结论:

   1,类加载的最终产品/目标时位于堆中的class对象。   2,java虚拟机给我们提供了两种类加载器:-虚拟机自带的加载器-用户自定义加载器,在java.lang.ClassLoader的子类。

5,java程序对类的使用

-主动使用
-被动使用

关键点:java虚拟机实现必须在类/接口被java程序首次主动使用时才会初始化它们。

主动使用:六种

1,创建类的实例。2,访问某个类/接口的静态变量,或者对静态变量赋值。3,调用类的静态方法。4,反射。5,初始化类的子类。6,服务器启动时被标明启动的类。

6, 类的初始化步骤:
不针对接口—
1,如果父类还没有初始化,那么子类初始化之前会现初始化父类。

2,对子类的初始化会对父类初始化,但是对父类的初始化不会对子类初始化。
–初始化子类的时候,并不会初始化父接口。
–初始化接口时,并不会初始化父接口。
–只有当程序首次使用特定接口的静态变量时,才会导致初始化接口。

引荐牛人博客,许多理解都是从他的博客中学到的,非常感谢!
http://blog.csdn.net/csh624366188/article/details/7278508