日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
解讀JVM對(duì)象生命周期之創(chuàng)建階段

本文向大家介紹一下JVM對(duì)象生命周期的概念,在JVM運(yùn)行空間中,對(duì)象的整個(gè)生命周期大致可以分為7個(gè)階段:創(chuàng)建階段(Creation)、應(yīng)用階段(Using)、不可視階段(Invisible)、不可到達(dá)階段(Unreachable)、可收集階段(Collected)、終結(jié)階段(Finalized)與釋放階段(Free),這里簡(jiǎn)單說(shuō)一下創(chuàng)建階段。

從事四川樂(lè)山服務(wù)器托管,服務(wù)器租用,云主機(jī),網(wǎng)站空間域名注冊(cè),CDN,網(wǎng)絡(luò)代維等服務(wù)。

詳細(xì)解讀JVM對(duì)象生命周期

JVM運(yùn)行空間中,整個(gè)JVM對(duì)象生命周期大致可以分為7個(gè)階段:創(chuàng)建階段(Creation)、應(yīng)用階段(Using)、不可視階段(Invisible)、不可到達(dá)階段(Unreachable)、可收集階段(Collected)、終結(jié)階段(Finalized)與釋放階段(Free)。上面的這7個(gè)階段,構(gòu)成了JVM中對(duì)象的完整的生命周期。下面分別介紹對(duì)象在處于這7個(gè)階段時(shí)的不同情形。

創(chuàng)建階段

在對(duì)象創(chuàng)建階段,系統(tǒng)要通過(guò)下面的步驟,完成對(duì)象的創(chuàng)建過(guò)程:

(1)為對(duì)象分配存儲(chǔ)空間。

(2)開(kāi)始構(gòu)造對(duì)象。

(3)遞歸調(diào)用其超類(lèi)的構(gòu)造方法。

(4)進(jìn)行對(duì)象實(shí)例初始化與變量初始化。

(5)執(zhí)行構(gòu)造方法體。

上面的5個(gè)步驟中的第3步就是指遞歸地調(diào)用該類(lèi)所擴(kuò)展的所有父類(lèi)的構(gòu)造方法,一個(gè)Java類(lèi)(除Object類(lèi)外)至少有一個(gè)父類(lèi)(Object),這個(gè)規(guī)則既是強(qiáng)制的,也是隱式的。你可能已經(jīng)注意到在創(chuàng)建一個(gè)Java類(lèi)的時(shí)候,并沒(méi)有顯式地聲明擴(kuò)展(extends)一個(gè)Object父類(lèi)。實(shí)際上,在Java程序設(shè)計(jì)中,任何一個(gè)Java類(lèi)都直接或間接的是Object類(lèi)的子類(lèi)。例如下面的代碼: 

 
 
 
 
  1. publicclassA{  
  2. …  
  3. }  
  4. 這個(gè)聲明等同于下面的聲明:  
  5. publicclassAextendsjava.lang.Object{  
  6. …  

上面講解了對(duì)象處于創(chuàng)建階段時(shí),系統(tǒng)所做的一些處理工作,其中有些過(guò)程與應(yīng)用的性能密切相關(guān),因此在創(chuàng)建對(duì)象時(shí),我們應(yīng)該遵循一些基本的規(guī)則,以提高應(yīng)用的性能。

下面是JVM對(duì)象生命周期在創(chuàng)建對(duì)象時(shí)的幾個(gè)關(guān)鍵應(yīng)用規(guī)則:

(1)避免在循環(huán)體中創(chuàng)建對(duì)象,即使該對(duì)象占用內(nèi)存空間不大。

(2)盡量及時(shí)使對(duì)象符合垃圾回收標(biāo)準(zhǔn)。

(3)不要采用過(guò)深的繼承層次。

(4)訪問(wèn)本地變量?jī)?yōu)于訪問(wèn)類(lèi)中的變量。

關(guān)于規(guī)則(1)避免在循環(huán)體中創(chuàng)建對(duì)象,即使該對(duì)象占用內(nèi)存空間不大,需要提示一下,這種情況在我們的實(shí)際應(yīng)用中經(jīng)常遇到,而且我們很容易犯類(lèi)似的錯(cuò)誤,例如下面的代碼: 

 
 
 
 
  1. ……  
  2. for(inti=0;i<10000;++i){  
  3. Objectobj=newObject();  
  4. System.out.println("obj="+obj);  
  5. }  
  6. ……  

 上面代碼的書(shū)寫(xiě)方式相信對(duì)你來(lái)說(shuō)不會(huì)陌生,也許在以前的應(yīng)用開(kāi)發(fā)中你也這樣做過(guò),尤其是在枚舉一個(gè)Vector對(duì)象中的對(duì)象元素的操作中經(jīng)常會(huì)這樣書(shū)寫(xiě),但這卻違反了上述規(guī)則(1),因?yàn)檫@樣會(huì)浪費(fèi)較大的內(nèi)存空間,正確的方法如下所示: 

 
 
 
 
  1. ……  
  2. Objectobj=null;  
  3. for(inti=0;i<10000;++i){  
  4. obj=newObject();  
  5. System.out.println("obj="+obj);  
  6. }  
  7. ……  

 采用上面的第二種編寫(xiě)方式,僅在內(nèi)存中保存一份對(duì)該對(duì)象的引用,而不像上面的***種編寫(xiě)方式中代碼會(huì)在內(nèi)存中產(chǎn)生大量的對(duì)象應(yīng)用,浪費(fèi)大量的內(nèi)存空間,而且增大了系統(tǒng)做垃圾回收的負(fù)荷。因此在循環(huán)體中聲明創(chuàng)建對(duì)象的編寫(xiě)方式應(yīng)該盡量避免。
另外,不要對(duì)一個(gè)對(duì)象進(jìn)行多次初始化,這同樣會(huì)帶來(lái)較大的內(nèi)存開(kāi)銷(xiāo),降低系統(tǒng)性能,如: 

 
 
 
 
  1. publicclassA{  
  2. privateHashtabletable=newHashtable();  
  3. publicA(){  
  4. //將Hashtable對(duì)象table初始化了兩次  
  5. table=newHashtable();  
  6. }  
  7. }  

 正確的方式為: 

 
 
 
 
  1. publicclassB{  
  2. privateHashtabletable=newHashtable();  
  3. publicB(){  
  4. }  

不要小看這個(gè)差別,它卻使應(yīng)用軟件的性能相差甚遠(yuǎn),如圖2-5所示。

看來(lái)在程序設(shè)計(jì)中也應(yīng)該遵從“勿以惡小而為之”的古訓(xùn),否則我們開(kāi)發(fā)出來(lái)的應(yīng)用也是低效的應(yīng)用,有時(shí)應(yīng)用軟件中的一個(gè)極小的失誤,就會(huì)大幅度地降低整個(gè)系統(tǒng)的性能。因此,我們?cè)谌粘5膽?yīng)用開(kāi)發(fā)中,應(yīng)該認(rèn)真對(duì)待每一行代碼,采用***化的編寫(xiě)方式,不要忽視細(xì)節(jié),不要忽視潛在的問(wèn)題。本節(jié)關(guān)于JVM對(duì)象生命周期的***個(gè)階段就介紹到這里,請(qǐng)看下節(jié)有關(guān)其他階段的介紹。

【編輯推薦】

  1. JVM內(nèi)存溢出的兩大類(lèi)型及解決方案
  2. Tomcat配置JVM參數(shù)巧妙方法
  3. JVM基礎(chǔ):解析JVM分代垃圾回收策略
  4. JVM for Linux JIT診斷技術(shù)簡(jiǎn)介
  5. 巧解IBM JVM for Linux onPOWER性能調(diào)優(yōu)

網(wǎng)頁(yè)標(biāo)題:解讀JVM對(duì)象生命周期之創(chuàng)建階段
當(dāng)前網(wǎng)址:http://m.5511xx.com/article/cdhjsce.html