程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java開發平台中的生命周期管理

Java開發平台中的生命周期管理

編輯:關於JAVA

對象的生命周期沒有大家想的那麼復雜。其實其就是回答了兩個簡單的問題。什麼時候需要創建對象? 什麼時候把對象消亡?這兩個問題解決了,那麼對象的生命周期問題也就解決了。

一、傳統的對象生命周期管理方法。

為了對Java開發平台中的生命周期管理方法有一個更加深刻的理解,筆者認為大家需要對傳統的生命 周期管理方法先有一個了解。因為這有助於大家有一個相互的對比,從而會對Java語言中的生命周期管理 方法會有一個比較直觀的印象。

在傳統的編程語言中,如C語言,其考慮對象的生命周期,主要是從對象與應用程序的執行效率出發的 。為了追求應用程序最大的執行效率,C語言要求在編寫應用程序的時候程序開發人員必須確定對象的存 儲空間與生命周期,既可以通過堆餞或者限域變量來實現。這麼設計的話,好處是很明顯的。由於在程序 開發的時候就涉及好了對象的存儲空間與生命周期,那麼在程序運行的時候就不需要再花精力去創建對象 。應用程序開發人員需要知道的是,在堆棧中創建與釋放對象的存儲空間是一件很容易且不用花費多少時 間的事情。如在堆棧中創建對象空間只需要一條將棧頂指針向下移動的匯編指令,另一條匯編指令對應釋 放存儲空間所需的將棧頂指針往上移動即可。所以應用程序的執行速度就會比較高,可以將對象存儲空間 的分配和釋放置於比較有限考慮的地位。

但是這種管理方法的最大缺陷就是靈活性不高。因為在應用程序開發的時候就必須要知道對象的確切 數量、生命周期和存儲空間。如果後續需要對應用程序進行二次開發或者功能升級,如果涉及到添加新對 象的話,那麼修改的工作量就會很大。而且對於普通的應用程序開發人員來說,很難對所需要的對象的數 量與生命周期,做出一個准確的預計。可見,這種管理方式雖然可以保證應用程序的最大運行速度,但是 其局限性也是蠻大的。其不僅靈活性不高,而且對於應用程序開發者有更高的要求。

二、Java平台下的對象生命周期管理方法。

在Java語言平台下,其與傳統的對象管理方法有很大的不同。在Java語言平台下,叫做動態創建對象 。簡單地說,就是不是在應用程序開發的時候創建對象,而是在應用程序運行的過程中動態的根據需要建 立對象。與上面的對象生命周期不同,動態的創建對象,只在應用程序運行的時候才會考慮需要創建多少 對象,他們的生命周期有多久,對象的類型是什麼等等。這些問題只有在應用程序代碼被執行的那一刻才 能夠最終的確定下來。在應用程序開發的過程中不需要關注這些問題。如在Java語言開發中,一開始不需 要建立對象。在需要對象的時候,可以利用new關鍵字來創建一個對象。

很明顯,由於對象的創建與消亡都是在應用程序運行的時候動態管理的,為此其靈活性要比傳統的靜 態管理方式要高。當需要新的對象相時,只需要在代碼中利用NEW關鍵字創建一個即可,而不需要對其他 的內容進行更改。為此,象Java這種采用動態機制來管理對象生命周期的語言,往往被認為其在升級、二 次開發上面都比傳統的C語言程序要高。而且由於在需要的時候創建對象,為此對於應用程序開發者的要 求也相對比較低一點。應用程序開發人員進入Java語言的門檻也會低許多。

但是其最大的缺陷就是會影響到應用程序的執行效率。因為如果采用動態創建對象的話,則對象的存 儲空間是在應用程序運行時被動態管理的。所以此時應用程序就需要耗費額外的時間在堆中分配存儲空間 ,這個時間就要遠遠的大於第一種靜態管理對象在堆棧中創建存儲空間的時間。為此在同等條件下,Java 語言開發的應用程序效率就比C語言開發的應用程序要低一點。如果不采取其他措施來優化Java語言性能 的話,那麼這個差距會很大。

為此Java語言采用這種對象生命周期管理方式,主要就是看中其對象管理過程中的靈活性。動態創建 對象的管理方式可以方便解決一般化編程問題。這也會創建一些應用程序自定義平台提供了幫助。

三、通過垃圾回收器來自動回收不需要用的對象。

動態管理對象的方式其除了在性能上有所欠缺外,最重要的是其在對象的回收上也有比較大的缺陷。 如通過堆棧來創建對象(第一種管理對象的方式),語言編譯器可以確定對象存活的時間,並在時間到期後 自動收回對象所占用的空間。而如果在堆上創建對象(第二種對象管理方式),則語言編譯器就對應用程序 對象的生命周期一無所知,不知道什麼時候對象會消亡。為此如果不采取其他處理機知的話,則需要通過 代碼來判斷對象的生命周期,並在適當的時候收回對象所占用的存儲空間。可是這種通過代碼來判斷對象 生命周期的方式,會在很大程度上造成應用程序的安全漏洞,若發現內存洩露等等的安全隱患。

不過如果采用Java語言作為開發平台的話,則不用擔心這個問題。因為在Java語言平台下,提供了一 種叫做垃圾回收器的管理機制。垃圾回收器就好像是一個監視器,其時刻監視著應用程序的運行。它可以 自動發現應用程序對象何時消亡,從而幫助應用程序釋放對象所占用的空間。也就是說,如果采用Java語 言的垃圾回收器,不需要再通過編碼來判斷什麼時候消亡對象。這項工作的話,Java語言編譯器會幫助程 序開發人員來完成。說的再直白一點,應用程序開發人員只需要負責創建對象即可。對象需要消亡的時候 ,其會自動消失(當然是在垃圾回收器的幫助下)。

可見通過Java垃圾回收器的幫助,可以解決通過堆來創建對象的不足之處。應用程序開發人員可以不 用考慮該在什麼時候釋放對象所占用的空間,不需要開發額外的代碼來管理這個問題。從而可以在最大程 度上避免應用程序內存洩露的安全隱患。

另外需要注意的一點就是,雖然Java語言的垃圾回收器已經解決了對象回收與空間釋放的問題。但是 其對於性能方面的改善不能夠起到任何的作用。所以這個性能上的缺陷仍然成為Java語言的一個瓶頸資源 。當然這個問題也不是我們能夠解決的,需要那些語言專家來想法設法提高動態分配對象空間的效率。我 們應用程序開發者所能夠做的就是通過優化Java語言代碼,通過代碼復用與繼承等方式來提高應用程序的 性能,讓應用程序的性能有所改善。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved