成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解讀JVM對象生命周期之創建階段

開發 后端
你對JVM對象生命周期的概念是否了解,JVM對象生命周期大致可以分為七個階段,這里向大家描述一下第一個階段也就是創建階段,相信你一定會感興趣的。

本文向大家介紹一下JVM對象生命周期的概念,在JVM運行空間中,對象的整個生命周期大致可以分為7個階段:創建階段(Creation)、應用階段(Using)、不可視階段(Invisible)、不可到達階段(Unreachable)、可收集階段(Collected)、終結階段(Finalized)與釋放階段(Free),這里簡單說一下創建階段。

詳細解讀JVM對象生命周期

JVM運行空間中,整個JVM對象生命周期大致可以分為7個階段:創建階段(Creation)、應用階段(Using)、不可視階段(Invisible)、不可到達階段(Unreachable)、可收集階段(Collected)、終結階段(Finalized)與釋放階段(Free)。上面的這7個階段,構成了JVM中對象的完整的生命周期。下面分別介紹對象在處于這7個階段時的不同情形。

創建階段

在對象創建階段,系統要通過下面的步驟,完成對象的創建過程:

(1)為對象分配存儲空間。

(2)開始構造對象。

(3)遞歸調用其超類的構造方法。

(4)進行對象實例初始化與變量初始化。

(5)執行構造方法體。

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

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

上面講解了對象處于創建階段時,系統所做的一些處理工作,其中有些過程與應用的性能密切相關,因此在創建對象時,我們應該遵循一些基本的規則,以提高應用的性能。

下面是JVM對象生命周期在創建對象時的幾個關鍵應用規則:

(1)避免在循環體中創建對象,即使該對象占用內存空間不大。

(2)盡量及時使對象符合垃圾回收標準。

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

(4)訪問本地變量優于訪問類中的變量。

關于規則(1)避免在循環體中創建對象,即使該對象占用內存空間不大,需要提示一下,這種情況在我們的實際應用中經常遇到,而且我們很容易犯類似的錯誤,例如下面的代碼: 

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

 上面代碼的書寫方式相信對你來說不會陌生,也許在以前的應用開發中你也這樣做過,尤其是在枚舉一個Vector對象中的對象元素的操作中經常會這樣書寫,但這卻違反了上述規則(1),因為這樣會浪費較大的內存空間,正確的方法如下所示: 

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

 采用上面的第二種編寫方式,僅在內存中保存一份對該對象的引用,而不像上面的***種編寫方式中代碼會在內存中產生大量的對象應用,浪費大量的內存空間,而且增大了系統做垃圾回收的負荷。因此在循環體中聲明創建對象的編寫方式應該盡量避免。
另外,不要對一個對象進行多次初始化,這同樣會帶來較大的內存開銷,降低系統性能,如: 

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

 正確的方式為: 

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

不要小看這個差別,它卻使應用軟件的性能相差甚遠,如圖2-5所示。

初始化對象多次所帶來的性能差別

看來在程序設計中也應該遵從“勿以惡小而為之”的古訓,否則我們開發出來的應用也是低效的應用,有時應用軟件中的一個極小的失誤,就會大幅度地降低整個系統的性能。因此,我們在日常的應用開發中,應該認真對待每一行代碼,采用***化的編寫方式,不要忽視細節,不要忽視潛在的問題。本節關于JVM對象生命周期的***個階段就介紹到這里,請看下節有關其他階段的介紹。

【編輯推薦】

  1. JVM內存溢出的兩大類型及解決方案
  2. Tomcat配置JVM參數巧妙方法
  3. JVM基礎:解析JVM分代垃圾回收策略
  4. JVM for Linux JIT診斷技術簡介
  5. 巧解IBM JVM for Linux onPOWER性能調優
責任編輯:佚名 來源: javaeye.com
相關推薦

2010-09-27 10:40:47

JVM對象生命周期

2009-03-04 10:18:50

生命周期JVMjava

2013-08-19 17:03:00

.Net生命周期對象

2010-01-15 13:52:44

VB.NET對象生命周

2009-06-17 15:06:50

Hibernate實體

2011-07-07 14:22:27

Cocoa 對象 生命周期

2023-10-07 00:05:07

2015-07-08 16:28:23

weak生命周期

2023-10-05 06:01:28

2022-08-02 08:00:00

機器學習數據框架

2009-07-23 18:55:17

ASP.NET頁生命周

2022-04-19 07:20:24

軟件開發安全生命周期SSDLC應用安全

2012-06-20 10:29:16

敏捷開發

2009-06-24 10:47:55

JSF生命周期

2021-07-19 05:52:29

網絡生命周期網絡框架

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl線程

2009-08-10 14:31:46

ASP.NET組件設計ASP.NET控件生命

2023-03-16 15:29:57

鴻蒙工具

2025-01-06 08:12:30

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区视频 | 国产精品久久9 | 久久亚洲一区二区三区四区 | 日韩中文字幕 | 国产精品久久久久久久久久久新郎 | 久久久久9999亚洲精品 | 精品国产欧美 | 国产日韩一区二区三区 | 久久久久久国产免费视网址 | 特黄色一级毛片 | 羞羞的视频网站 | 国产精品一区二区久久 | 一区二区免费 | 天天摸天天看 | 99精品视频在线 | 天天射影院 | 久久久久亚洲精品 | 99精品欧美一区二区蜜桃免费 | 天天操伊人| 欧美国产视频 | av日韩高清 | 午夜爽爽男女免费观看hd | 免费看啪啪网站 | 久久一区二区三区免费 | 超碰成人免费 | 国产网站在线免费观看 | 一级毛片成人免费看a | 日本a视频 | 国产欧美在线视频 | aaa在线观看 | 日韩免费一区二区 | 久久亚洲一区二区三 | 精品久久国产 | 九九热在线观看 | 电影91久久久 | 一区二区三区福利视频 | 日韩精品一区二区三区在线播放 | 欧美福利在线 | 国产免费一区二区 | 欧美一级片黄色 | 欧洲免费毛片 |