專利名稱:把無用方法收集到垃圾箱中的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種提高數(shù)據(jù)處理應(yīng)用程序的有效性的方法。
更準(zhǔn)確地說,本發(fā)明涉及提高虛擬機(jī)中的數(shù)據(jù)處理速率,尤其與Java程序語言有關(guān)。
雖然下面主要針對(duì)Java程序語言描述本發(fā)明,但是,本發(fā)明不限于Java程序語言,而是可以與許多程序語言一起應(yīng)用。
本方法打算用在程序的自適應(yīng)優(yōu)化上。在自適應(yīng)優(yōu)化中,當(dāng)運(yùn)行程序時(shí),重構(gòu)程序和優(yōu)化程序的各個(gè)不同部分。運(yùn)行的程序越長,所需的存儲(chǔ)空間就越大,因此,提高數(shù)據(jù)處理能力的一般性問題在于迅速創(chuàng)建新的存儲(chǔ)場(chǎng)地。
Java和其它動(dòng)態(tài)程序語言包括自動(dòng)存儲(chǔ)器管理。這意味著程序員無需關(guān)心存儲(chǔ)器已經(jīng)使用的那些部分。虛擬機(jī)有時(shí)進(jìn)行所謂的垃圾收集(garbagecollection),大體上指的是虛擬機(jī)掃描整個(gè)存儲(chǔ)器,找出哪些對(duì)象還存儲(chǔ)在存儲(chǔ)器中和哪些對(duì)象程序不再訪問。歸還存儲(chǔ)器的這些部分供以后使用。
Java還包括有關(guān)所謂線程管理方法的方法。因此,Java包含了支持或模擬兩個(gè)或更多個(gè)程序的同時(shí)處理的系統(tǒng)。線程管理可以分成兩個(gè)部分。一個(gè)部分涉及到以控制方式構(gòu)造不同線程的方式。另一個(gè)部分涉及到哪些線程將被運(yùn)行和哪些線程將是被動(dòng)的和等待著被運(yùn)行。
為了進(jìn)一步提高有效性和讓程序清理占用的存儲(chǔ)空間,僅僅根據(jù)各個(gè)對(duì)象來優(yōu)化存儲(chǔ)器是不夠的。
本發(fā)明解決了這個(gè)問題。
因此,本發(fā)明涉及當(dāng)使用虛擬機(jī)時(shí),提高數(shù)據(jù)處理應(yīng)用程序的有效性的方法,其中所述程序包括許多個(gè)方法,即許多個(gè)程序段,它們都存儲(chǔ)在所用計(jì)算機(jī)的存儲(chǔ)器中,和其中所述程序利用了垃圾收集過程,其中這種新發(fā)明的方法的特征在于,在第1步驟中,根據(jù)由此所需的方法分析所有所謂的線程堆棧(thread stack);在第2步驟中,使所需方法的每一個(gè)都得到更新,其中,正在調(diào)用更新以前的方法被調(diào)用更新后的方法所取代;和在第3步驟中,刪除所有未更新的方法,其中,由所述程序清理相應(yīng)的存儲(chǔ)空間。
現(xiàn)在參照如附圖所示的本發(fā)明示范性實(shí)施例,在一定程度上比較詳細(xì)地描述本發(fā)明,在附圖中
圖1是方塊圖;圖2顯示了舊方法;和圖3顯示了根據(jù)本發(fā)明更新的方法。
圖1顯示了Java虛擬機(jī)JVM,無論操作系統(tǒng)是WinNT、LINUX、Solaris、還是一些其它系統(tǒng),這種虛擬機(jī)JVM都可以用于運(yùn)行不同的數(shù)據(jù)程序1、2、3。如上所述,盡管Java程序語言是非常流行的程序語言,但是,本發(fā)明不限于這種語言,而是可以應(yīng)用于所有面向?qū)ο蟮暮团c平臺(tái)無關(guān)的相應(yīng)程序語言。
因此,本發(fā)明涉及當(dāng)使用虛擬機(jī)時(shí),提高數(shù)據(jù)處理應(yīng)用程序的有效性的方法,其中,該程序包括許多個(gè)方法,即許多個(gè)程序段,它們都存儲(chǔ)在所用計(jì)算機(jī)的存儲(chǔ)器中,和其中,該程序利用了垃圾收集進(jìn)程。
大家知道,垃圾箱收集各個(gè)對(duì)象,隨之刪除當(dāng)前不再使用的對(duì)象,從而使相應(yīng)的存儲(chǔ)空間得到清理。
在大多數(shù)系統(tǒng)中,許多方法,即許多程序段,被使用一次或數(shù)次,或者這些方法在很短的時(shí)間內(nèi)得到應(yīng)用,然后就不再被使用了。
在Java和相應(yīng)程序的情況中,裝入新方法之后,舊方法就再也沒有用了。
此外,自適應(yīng)優(yōu)化導(dǎo)致存儲(chǔ)在存儲(chǔ)器中的方法的優(yōu)化或再優(yōu)化,其中留下的舊方法就再也沒有用了。
當(dāng)優(yōu)化鎖定機(jī)制選擇和垃圾收集選擇時(shí),有必要用新機(jī)制取代使用舊機(jī)制的所有已使用過的方法。
根據(jù)本發(fā)明,在新發(fā)明的方法的第1步驟中,根據(jù)所需的各個(gè)方法分析所有所謂的線程堆棧。在第2步驟中,更新所需方法的每一個(gè),其中,正在對(duì)所述更新以前的方法的調(diào)用被對(duì)更新方法的調(diào)用所取代。在第3步驟中,刪除所有未更新的方法,和由所述程序清理相應(yīng)的存儲(chǔ)空間。
這個(gè)過程不僅的確清除了無用方法,而且致使已經(jīng)更新的那些方法得到重排,以便把方法的調(diào)用直接指向更新的方法,而不是通過不再使用的舊方法來進(jìn)行。
這顯示在圖2和3中,其中圖2顯示了舊方法,和圖3顯示了所用的更新方法。在圖2中顯示了三個(gè)方法foo、apa和bar。foo從存儲(chǔ)器地址4711開始,apa從地址4714開始,和bar從地址4720開始。
線程堆棧的分析表明,只有方法foo和bar被使用,因此,foo和bar不再引用方法apa。
把方法foo和bar更新成圖3所示的那些方法。在這種情況中,方法foo和bar精確地重建起來,盡管不同之處在于,各個(gè)方法獲得了新地址,和此時(shí),foo對(duì)bar的調(diào)用指向新的bar地址4903。
刪除了所有舊方法,即圖2中的方法,以前被這些方法占用的存儲(chǔ)空間也空出來供未來使用。
當(dāng)進(jìn)行對(duì)象的垃圾收集時(shí),一般來說,在進(jìn)行垃圾收集的時(shí)候,程序停止運(yùn)行。在垃圾收集和刪除了不再使用的對(duì)象之后,程序重新啟動(dòng)運(yùn)行。
當(dāng)應(yīng)用本發(fā)明時(shí)可以使用這樣的方法。
但是,最好用如下的方法來取代。
當(dāng)實(shí)施新發(fā)明的方法時(shí),在程序正在運(yùn)行的時(shí)候停止一個(gè)線程,與此同時(shí),把用于停止線程的方法轉(zhuǎn)移到一個(gè)列表中,然后,重新啟動(dòng)該線程。接著,更新和存儲(chǔ)該列表中的方法。在按照這種方式處理完所有線程之后,使所有線程同時(shí)停止,即,以便更新與所關(guān)心的線程相關(guān)的所有已用方法。刪除沒有被更新的所有方法,和用更新方法重新啟動(dòng)所有線程。
由于更新是斷斷續(xù)續(xù)進(jìn)行的,這種方法避免了停止運(yùn)行程序的需要。
如上所述,在Java和相應(yīng)的語言中利用了鎖定機(jī)制??梢赃x擇不同的鎖定機(jī)制。重要的是,選擇在避免與另一個(gè)線程同時(shí)訪問給定對(duì)象的多于一個(gè)的線程的出現(xiàn)方面最為有效的鎖定機(jī)制。
同步問題出現(xiàn)在幾個(gè)線程想要訪問同一個(gè)對(duì)象或資源的時(shí)候。為了在Java程序語言中解決這個(gè)問題,每個(gè)線程盡力達(dá)到資源鎖定??梢砸愿鞣N各樣的方式利用資源鎖定機(jī)制。不同鎖定機(jī)制的有效性取決于線程如何致力于獲得同步資源。
根據(jù)優(yōu)選實(shí)施例,當(dāng)利用鎖定機(jī)制時(shí),在所述第1步驟之前的步驟中識(shí)別最有效的鎖定機(jī)制,和更新利用如此確定的鎖定機(jī)制的方法。
至于垃圾收集算法,也需要加以選擇。許多面向?qū)ο蟮恼Z言都利用垃圾收集。這意味著,程序員無需明確地告訴系統(tǒng)不再需要某個(gè)對(duì)象了。系統(tǒng)負(fù)責(zé)這種檢測(cè),和收回被對(duì)象占用的存儲(chǔ)器部分。為了有效實(shí)現(xiàn)這種檢測(cè)和收回,已經(jīng)提出了許多不同的算法。已經(jīng)證明,不同的算法最好適合于不同的應(yīng)用程序。選擇最適合于正在運(yùn)行的應(yīng)用程序的垃圾收集算法對(duì)于取得與所關(guān)心的程序有關(guān)的最大執(zhí)行速率是非常有意義的。
根據(jù)本發(fā)明的另一個(gè)優(yōu)選實(shí)施例,當(dāng)利用不同的垃圾收集算法時(shí),在所述第1步驟之前的步驟中確定各個(gè)對(duì)象的分配和壽命,此后,使最有效的垃圾收集算法得到識(shí)別,和更新構(gòu)成所需垃圾收集算法的方法,然后刪除其余的垃圾收集算法。
優(yōu)選實(shí)施例的應(yīng)用提供了優(yōu)化代碼、線程和存儲(chǔ)器管理的高效方法,其中,一般特征在于方法的識(shí)別和更新,以便不把無用方法裝入系統(tǒng)中。
權(quán)利要求
1.一種在使用虛擬機(jī)時(shí)提高數(shù)據(jù)處理應(yīng)用程序的有效性的方法,其中該程序包括許多個(gè)方法,即許多個(gè)程序段,它們都存儲(chǔ)在所用計(jì)算機(jī)的存儲(chǔ)器中,和其中該程序利用了垃圾收集過程,其特征在于,在第1步驟中,根據(jù)由此所需的方法分析所有所謂的線程堆棧;在第2步驟中,使所述所需方法的每一個(gè)都得到更新,其中,正在調(diào)用更新以前的方法被調(diào)用更新后的方法所取代;和在第3步驟中,刪除所有未更新的方法,和由該程序清理相應(yīng)的存儲(chǔ)空間。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,當(dāng)程序正在運(yùn)行時(shí),一次讓一個(gè)線程停止;把用于停止線程的方法轉(zhuǎn)移到一個(gè)列表中,和此后,重新啟動(dòng)線程;更新和存儲(chǔ)所述列表中的方法;在按照所述方式處理完所有線程之后,使所有線程同時(shí)停止;刪除沒有被更新的所有方法,和用更新的方法重新啟動(dòng)所有線程。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,當(dāng)利用鎖定機(jī)制時(shí),在所述第1步驟之前的步驟中識(shí)別最有效的鎖定機(jī)制;和更新利用如此確定的鎖定機(jī)制的那些方法。
4.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于,當(dāng)利用不同的垃圾收集算法時(shí),在所述第1步驟之前的步驟中確定各個(gè)對(duì)象的分配和壽命,然后,識(shí)別最有效的垃圾收集算法;更新構(gòu)成所需垃圾收集算法的方法;和刪除其余的垃圾收集算法。
全文摘要
一種在使用虛擬機(jī)時(shí)提高數(shù)據(jù)處理應(yīng)用程序的有效性的方法,其中該程序包括許多個(gè)方法,即許多個(gè)程序段,它們都存儲(chǔ)在所用計(jì)算機(jī)的存儲(chǔ)器中,和其中該程序利用了垃圾收集過程。該發(fā)明的特征在于,在第1步驟中,根據(jù)由此所需的方法分析所有所謂的線程堆棧;在第2步驟中,使所述所需方法的每一個(gè)都得到更新,其中正在調(diào)用更新以前的方法被調(diào)用更新后的方法所取代;在第3步驟中,刪除所有未更新的方法,和由該程序清理相應(yīng)的存儲(chǔ)空間。
文檔編號(hào)G06F12/00GK1402847SQ0081641
公開日2003年3月12日 申請(qǐng)日期2000年10月27日 優(yōu)先權(quán)日1999年10月28日
發(fā)明者喬基姆·達(dá)爾斯泰特 申請(qǐng)人:阿佩爾虛擬機(jī)公司