溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java開發(fā)平臺中生命周期管理的示例分析

發(fā)布時間:2022-01-05 16:00:40 來源:億速云 閱讀:111 作者:小新 欄目:編程語言

這篇文章主要介紹Java開發(fā)平臺中生命周期管理的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、傳統(tǒng)的對象生命周期管理方法。

為了對Java開發(fā)平臺中的生命周期管理方法有一個更加深刻的理解,筆者認(rèn)為大家需要對傳統(tǒng)的生命周期管理方法先有一個了解。因為這有助于大家有一個相互的對比,從而會對Java語言中的生命周期管理方法會有一個比較直觀的印象。

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

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

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

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

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

但是其***的缺陷就是會影響到應(yīng)用程序的執(zhí)行效率。因為如果采用動態(tài)創(chuàng)建對象的話,則對象的存儲空間是在應(yīng)用程序運行時被動態(tài)管理的。所以此時應(yīng)用程序就需要耗費額外的時間在堆中分配存儲空間,這個時間就要遠(yuǎn)遠(yuǎn)的大于***種靜態(tài)管理對象在堆棧中創(chuàng)建存儲空間的時間。為此在同等條件下,Java語言開發(fā)的應(yīng)用程序效率就比C語言開發(fā)的應(yīng)用程序要低一點。如果不采取其他措施來優(yōu)化Java語言性能的話,那么這個差距會很大。

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

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

動態(tài)管理對象的方式其除了在性能上有所欠缺外,最重要的是其在對象的回收上也有比較大的缺陷。如通過堆棧來創(chuàng)建對象(***種管理對象的方式),語言編譯器可以確定對象存活的時間,并在時間到期后自動收回對象所占用的空間。而如果在堆上創(chuàng)建對象(第二種對象管理方式),則語言編譯器就對應(yīng)用程序?qū)ο蟮纳芷谝粺o所知,不知道什么時候?qū)ο髸?。為此如果不采取其他處理機知的話,則需要通過代碼來判斷對象的生命周期,并在適當(dāng)?shù)臅r候收回對象所占用的存儲空間。可是這種通過代碼來判斷對象生命周期的方式,會在很大程度上造成應(yīng)用程序的安全漏洞,若發(fā)現(xiàn)內(nèi)存泄露等等的安全隱患。

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

可見通過Java垃圾回收器的幫助,可以解決通過堆來創(chuàng)建對象的不足之處。應(yīng)用程序開發(fā)人員可以不用考慮該在什么時候釋放對象所占用的空間,不需要開發(fā)額外的代碼來管理這個問題。從而可以在***程度上避免應(yīng)用程序內(nèi)存泄露的安全隱患。

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

以上是“Java開發(fā)平臺中生命周期管理的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI