程序员在学习java编程开发的时候会发现对象是我们经常用到的一个开发元素,而今天我们就通过案例分析来了解一下,java编程开发对象的生存周期。
1、宏观视角
从宏观的角度看,对象的生存周期可以是:对象创建--->对象的使用--->对象的回收。
对象创建
对象创建可以采用new指令、反序列化、反射等方法,这一步骤主要是为对象分配内存并初始化。
对象的使用
对象的使用是将JVM栈中的对象的引用去定位、访问堆中的对象的具体位置,常采用的方法有句柄和直接指针。
对象的回收
对象的回收就是垃圾回收。
仅仅看这三大块还是有点不明所以,太粗糙,下面我们以微观的角度分析对象的生存周期。
2、微观视角
从微观视角来看,对象的生存的周期可以大致分为七个阶段:创建阶段、应用阶段、不可见阶段、不可达阶段、可收集阶段、终结阶段、对象空间重分配阶段。
创建阶段
对象创建阶段主要是为对象分配内存空间、开始构造对象并完成对static成员的初始化。对象一旦被创建,并且分派给某些变量赋值,这个对象的状态就被切换到了应用阶段。
应用阶段
应用阶段就是对象至少被一个强引用关联着。(莫慌,强引用的概念在下文中讲解)
不可见阶段
当一个对象处于不可见阶段时,说明程序不再持有该对象的任何强引用,但是这些引用可能还存在着,一般情况下是指程序的执行已经超过该作用域了。
不可达阶段
对象处于不可达阶段是指该对象不再被任何强引用所持有,但是该对象仍可能被JVM等系统下的某些已装载的静态变量或线程或JNI等强引用持有着,这些特殊的强引用被称为”GCroot”。存在着这些GCroot会导致对象的内存泄露情况,无法被回收.
可收集阶段
当垃圾回收器发现该对象已经处于“不可达阶段”而且垃圾回收器已经对该对象的内存空间又一次分配做好准备时,则对象进入了“收集阶段”。
终结阶段
当对象运行完finalize方法后仍然处于不可达状态时,则该对象进入终结阶段。在该阶段是等待垃圾回收器对该对象空间进行回收。
对象空间重分配阶段
对象空间又一次分配阶段,垃圾回收器对该对象的所占用的内存空间进行回收或者再分配了,则该对象彻底消失了,称之为“对象空间又一次分配阶段”。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。