标签:
JAVA类的生命周期,java类通过编译为.class文件,是字节码文件,然后放入虚拟机里面。只有这种字节码文件才能够在java虚拟机中运行,java类的生命周期就是指一个class文件从加载到卸载的全过程。
(1)、关于JVM(java虚拟机):
· 方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息、常量、静态变量以及方法代码的内存区域,叫做方法区。
· 常量池:常量池是方法区的一部分,主要用来存放常量和类中的符号引用等信息。
· 堆区:用于存放类的对象实例。
· 栈区:也叫java虚拟机栈,是由一个一个的栈帧组成的后进先出的栈式结构,栈桢中存放方法运行时产生的局部变量、方法出口等信息。当调用一个方法时,虚拟机栈中就会创建一个栈帧存放这些数据,当方法调用完成时,栈帧消失,如果方法中调用了其他方法,则继续在栈顶创建新的栈桢。
(2)、一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直接被使用的情况,如图所示:
加载:就是把.class文件加载到JVM中。要注意与类的加载不同意思,类的加载是包括加载、连接和初始化的。连接:就是把加载到JVM中的文件,通过验证来判断.class的正确性,为初始化前的准备工作。在解析阶段,jvm会将 所有的类或接口名、字段名、方法名转换为具体的内存地址。(概括起来就是验证阶段、准备阶段和解析解的)
初始化:按照顺序自上而下运行类中的变量赋值语句和静态语句,如果有父类,则首先按照顺序运行父类中的变量赋值语句和静态语句。
使用:
使用阶段包括主动引用和被动引用,主动饮用会引起类的初始化,而被动引用不会引起类的初始化。
卸装:类的卸载过程其实就是在方法区中清空类信息,java类的整个生命周期就结束了。
(3)、对象的生命周期对象开始创建,进行实例化的过程开始于类的初始化之后,也就是类的使用阶段,但是对象的创建、对象的回收、对象的终结只是类的使用阶段的一个小的部分(
使用阶段的主动引用的一种情况);
说明:本文是根据csdn博客上的《类的生命周期》总结而来,并非原创,谢谢~
标签:
原文地址:http://blog.csdn.net/mll999888/article/details/44514793