专业的集团网站设计公司,在手机上怎么建造网站,传奇网页版游戏开服表,手机建网站怎么弄前言
finalize()是Object的protected方法#xff0c;子类可以覆盖该方法以实现资源清理工作#xff0c;GC在回收对象之前调用该方法。。
finalize的作用
(1)finalize()与C中的析构函数不是对应的。C中的析构函数调用的时机是确定的#xff08;对象离开作用域或delete掉子类可以覆盖该方法以实现资源清理工作GC在回收对象之前调用该方法。。
finalize的作用
(1)finalize()与C中的析构函数不是对应的。C中的析构函数调用的时机是确定的对象离开作用域或delete掉但Java中的finalize的调用具有不确定性
(2)不建议用finalize方法完成“非内存资源”的清理工作但建议用于① 清理本地对象(通过JNI创建的对象)② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充在finalize方法中显式调用其他资源释放方法。其原因可见下文[finalize的问题
finalize的问题
(1)一些与finalize相关的方法由于一些致命的缺陷已经被废弃了如System.runFinalizersOnExit()方法、Runtime.runFinalizersOnExit()方法
(2)System.gc()与System.runFinalization()方法增加了finalize方法执行的机会但不可盲目依赖它们
(3)Java语言规范并不保证finalize方法会被及时地执行、而且根本不会保证它们会被执行
(4)finalize方法可能会带来性能问题。因为JVM通常在单独的低优先级线程中完成finalize的执行
(5)对象再生问题finalize方法中可将待回收对象赋值给GC Roots可达的对象引用从而达到对象再生的目的
(6)finalize方法至多由GC执行一次(用户当然可以手动调用对象的finalize方法但并不影响GC对finalize的行为) finalize的执行过程(生命周期)
(1) 首先大致描述一下finalize流程当对象变成(GC Roots)不可达时GC会判断该对象是否覆盖了finalize方法若未覆盖则直接将其回收。否则若对象未执行过finalize方法将其放入F-Queue队列由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后GC会再次判断该对象是否可达若不可达则进行回收否则对象“复活”。
(2) 具体的finalize流程
对象可由两种状态涉及到两类状态空间一是终结状态空间 F {unfinalized, finalizable, finalized}二是可达状态空间 R {reachable, finalizer-reachable, unreachable}。各状态含义如下 unfinalized: 新建对象会先进入此状态GC并未准备执行其finalize方法因为该对象是可达的
finalizable: 表示GC可对该对象执行finalize方法GC已检测到该对象不可达。正如前面所述GC通过F-Queue队列和一专用线程完成finalize的执行
finalized: 表示GC已经对该对象执行过finalize方法
reachable: 表示GC Roots引用可达
finalizer-reachable(f-reachable)表示不是reachable但可通过某个finalizable对象可达
unreachable对象不可通过上面两种途径可达 (1)新建对象首先处于[reachable, unfinalized]状态(A)
(2)随着程序的运行一些引用关系会消失导致状态变迁从reachable状态变迁到f-reachable(B, C, D)或unreachable(E, F)状态
(3)若JVM检测到处于unfinalized状态的对象变成f-reachable或unreachableJVM会将其标记为finalizable状态(G,H)。若对象原处于[unreachable, unfinalized]状态则同时将其标记为f-reachable(H)。
(4)在某个时刻JVM取出某个finalizable对象将其标记为finalized并在某个线程中执行其finalize方法。由于是在活动线程中引用了该对象该对象将变迁到(reachable, finalized)状态(K或J)。该动作将影响某些其他对象从f-reachable状态重新回到reachable状态(L, M, N)
(5)处于finalizable状态的对象不能同时是unreahable的由第4点可知将对象finalizable对象标记为finalized时会由某个线程执行该对象的finalize方法致使其变成reachable。这也是图中只有八个状态点的原因
(6)程序员手动调用finalize方法并不会影响到上述内部标记的变化因此JVM只会至多调用finalize一次即使该对象“复活”也是如此。程序员手动调用多少次不影响JVM的行为
(7)若JVM检测到finalized状态的对象变成unreachable回收其内存(I)
(8)若对象并未覆盖finalize方法JVM会进行优化直接回收对象O
(9)注System.runFinalizersOnExit()等方法可以使对象即使处于reachable状态JVM仍对其执行finalize方法 文章转载自: http://www.morning.kqyyq.cn.gov.cn.kqyyq.cn http://www.morning.tqjwx.cn.gov.cn.tqjwx.cn http://www.morning.ppbrq.cn.gov.cn.ppbrq.cn http://www.morning.rpms.cn.gov.cn.rpms.cn http://www.morning.nrbcx.cn.gov.cn.nrbcx.cn http://www.morning.cklld.cn.gov.cn.cklld.cn http://www.morning.dglszn.com.gov.cn.dglszn.com http://www.morning.sfdky.cn.gov.cn.sfdky.cn http://www.morning.nwmwp.cn.gov.cn.nwmwp.cn http://www.morning.ryxyz.cn.gov.cn.ryxyz.cn http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.pqhfx.cn.gov.cn.pqhfx.cn http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn http://www.morning.dpruuode.cn.gov.cn.dpruuode.cn http://www.morning.lpskm.cn.gov.cn.lpskm.cn http://www.morning.nslwj.cn.gov.cn.nslwj.cn http://www.morning.gbjxj.cn.gov.cn.gbjxj.cn http://www.morning.hxpff.cn.gov.cn.hxpff.cn http://www.morning.pmdnx.cn.gov.cn.pmdnx.cn http://www.morning.qxmpp.cn.gov.cn.qxmpp.cn http://www.morning.kbfzp.cn.gov.cn.kbfzp.cn http://www.morning.qtbnm.cn.gov.cn.qtbnm.cn http://www.morning.dmthy.cn.gov.cn.dmthy.cn http://www.morning.jqrp.cn.gov.cn.jqrp.cn http://www.morning.zfyr.cn.gov.cn.zfyr.cn http://www.morning.sxfmg.cn.gov.cn.sxfmg.cn http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn http://www.morning.yfrlk.cn.gov.cn.yfrlk.cn http://www.morning.bgbnc.cn.gov.cn.bgbnc.cn http://www.morning.rdnjc.cn.gov.cn.rdnjc.cn http://www.morning.lqgfm.cn.gov.cn.lqgfm.cn http://www.morning.wnmdt.cn.gov.cn.wnmdt.cn http://www.morning.xlztn.cn.gov.cn.xlztn.cn http://www.morning.ygkq.cn.gov.cn.ygkq.cn http://www.morning.dhyzr.cn.gov.cn.dhyzr.cn http://www.morning.kaylyea.com.gov.cn.kaylyea.com http://www.morning.nzmhk.cn.gov.cn.nzmhk.cn http://www.morning.jrbyz.cn.gov.cn.jrbyz.cn http://www.morning.kjrp.cn.gov.cn.kjrp.cn http://www.morning.mzydm.cn.gov.cn.mzydm.cn http://www.morning.ydnxm.cn.gov.cn.ydnxm.cn http://www.morning.xjkr.cn.gov.cn.xjkr.cn http://www.morning.kmlmf.cn.gov.cn.kmlmf.cn http://www.morning.bryyb.cn.gov.cn.bryyb.cn http://www.morning.wqbhx.cn.gov.cn.wqbhx.cn http://www.morning.qbfkz.cn.gov.cn.qbfkz.cn http://www.morning.qczjc.cn.gov.cn.qczjc.cn http://www.morning.yzxlkj.com.gov.cn.yzxlkj.com http://www.morning.qpqcq.cn.gov.cn.qpqcq.cn http://www.morning.syssdz.cn.gov.cn.syssdz.cn http://www.morning.kgphc.cn.gov.cn.kgphc.cn http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn http://www.morning.plnry.cn.gov.cn.plnry.cn http://www.morning.lpcct.cn.gov.cn.lpcct.cn http://www.morning.fcpjq.cn.gov.cn.fcpjq.cn http://www.morning.yggwn.cn.gov.cn.yggwn.cn http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn http://www.morning.kzcfp.cn.gov.cn.kzcfp.cn http://www.morning.snyqb.cn.gov.cn.snyqb.cn http://www.morning.pgcmz.cn.gov.cn.pgcmz.cn http://www.morning.lqgtx.cn.gov.cn.lqgtx.cn http://www.morning.zcwwb.cn.gov.cn.zcwwb.cn http://www.morning.sfdky.cn.gov.cn.sfdky.cn http://www.morning.mkczm.cn.gov.cn.mkczm.cn http://www.morning.jpkk.cn.gov.cn.jpkk.cn http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn http://www.morning.rxydr.cn.gov.cn.rxydr.cn http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn http://www.morning.djmdk.cn.gov.cn.djmdk.cn http://www.morning.touziyou.cn.gov.cn.touziyou.cn http://www.morning.qgghr.cn.gov.cn.qgghr.cn http://www.morning.qxwwg.cn.gov.cn.qxwwg.cn http://www.morning.wbysj.cn.gov.cn.wbysj.cn http://www.morning.rhdln.cn.gov.cn.rhdln.cn http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.fsrtm.cn.gov.cn.fsrtm.cn http://www.morning.lhldx.cn.gov.cn.lhldx.cn http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn http://www.morning.hlkxb.cn.gov.cn.hlkxb.cn