摘 要:隨著計算機技術的不斷進步和發(fā)展,Java語言程序憑借著自身的優(yōu)勢得到了廣泛的應用,并取得了顯著的成效。同時為了推動Java語言程序在計算機技術的作用,需要提高其精度,這就需要借助一定的對象別名分析技術。本文筆者對對象別名分析技術進行了分析和探討,主要是為提高求值的深度,同時為實現(xiàn)Java語言程序中部分求值器的綁定時間分析的實現(xiàn),進而為Java語言程序的應用提供指導和借鑒。
關鍵詞:Java語言程序;擴展對象別名分析;綁定時間分析;部分求值
中圖分類號:TP311 文獻標識碼:A 文章編號:1007-9599 (2013) 04-0000-02
計算機技術的發(fā)展推動了硬件速度的提高,同時也對軟件的設計提出了更高的要求,Java語言程序是一種面向對象程序設計語言的軟件程序,具有良好的性能,同時為了充分的發(fā)揮其作用,需要借助部分求值技術,提高計算的準確定和精度。為了滿足程序發(fā)展的需要,利用對象類例化模式成為一種有效的途徑,大大地提高了對綁定時間分析的準確性,對多數(shù)的單線程Java語言程序進行了有效的分析,實現(xiàn)了高精度的部分求值。
1 Java語言程序的綁定時間分析
在Java語言程序的應用中,需要進行部分求值,但是在求值的過程中會受到一定的限制因素的影響,這主要是在預處理階段無法對程序執(zhí)行中的每一個對象實例的綁定時間進行跟蹤,這就需要借助近似描述的方法。在原先的綁定時間分析中,將同類對象的成員變量進行標注,忽視了不同對象的成員變量問題,同時還忽視了父類實例和子類實例的區(qū)別,這就對綁定時間的分析精度造成了一定的影響,這一方法被稱為對象類的單變異例化方式。
在Java語言程序中,由不同的程序點動態(tài)生成的對象實例所面臨的應用場景也不盡相同,這就導致了分析精度的不同。對于程序的運行而言,高精度的程序分析會對不同的對象實例的綁定時間進行區(qū)分,并根據(jù)對象實例的不同采取不同方式的計算,同時剩余的計算功能也存在較大的差異。此外,滯留程序應該應用于各個版本中并對神域計算進行不同的描述,這樣的方法被稱為對象類的多變異例化方式。
就Java語言程序而言,可以實現(xiàn)對多態(tài)性的支持,能夠對多個類和程序構造的對象實例進行激活和調(diào)動,并實現(xiàn)不同的綁定,為了對綁定參數(shù)、變量和對象成員的把握,需要進行別名分析,進而確定好對象實例的綁定參數(shù)和變量。其中應用最為廣泛的是借助函數(shù)例化的處理方法,采用多變異方式,借助不同綁定的設置,提高了函數(shù)的多變異性質(zhì),進而使綁定時間分析的精度提高。
2 對象例化模型
為了充分認識和了解Java源程序,需要借助一定的模型,在對其計算進行分析的基礎上,通過建立對象例化模型可以對其計算過程和特點有全面的把握。在程序運行中,每個類的計算必須經(jīng)過部分求值,這樣就會在滯留程序中生成多個專用類,進而對源程序中的對象實例進行剩余計算。在經(jīng)過部分求值以后,會在滯留程序中產(chǎn)生不同類別的專用成員函數(shù),進行函數(shù)調(diào)用的剩余計算。
在Java語言程序中,對象例化模型是由多個模塊共同構成的,一般分為兩類:類例化模型和方法例化模型,前者是在相應的程序點并借助構造函數(shù)參數(shù)的綁定時間實現(xiàn)對指定類的程序例化,這樣可以生成一個滯留計算。后者表示通過標識一個專用的方法,表示了方法的多變異例化方式下的一種情形。構造方法的例化被認為是特殊的方法,無需包含成員變量的描述,且只有唯一的例化模式。
在對象例化模型中,通過利用專用類名進行變量綁定時間的分析設計,進而對對象實例內(nèi)部的各個成員變量的綁定時間進行有效的區(qū)分,同時還可以實現(xiàn)用專用類名的集合進行變量綁定時間的規(guī)定。
可見,該模型是對Java語言程序的綁定時間分析的基礎,對程序的運行起到了積極的促進作用,進而滿足了部分求值的需要,可以清晰的反應出程序各個階段的部分求值完成的情況,實現(xiàn)對部分求值結果的分析和處理。
3 對象別名分析
在對Java程序進行部分計算時,需要進行靜態(tài)輸入和動態(tài)輸入,進而依據(jù)對象例化模型對程序的執(zhí)行過程進行分析,并根據(jù)計算出的數(shù)據(jù)關系得到綁定時間,與此同時,通過對引用型的變量的使用情況的跟蹤,可以實現(xiàn)對不同程序點的對象實例進行別名分析,可以確定將引用型變量與程序點的對象實例進行綁定。當分析到新的運算時,創(chuàng)建類例化模式以及構造函數(shù)的方法例化模式,分析到消息傳遞時,需要創(chuàng)建屬于接收信息專用類的例化模式。
為了滿足在引用型變量在靜態(tài)分析程序中的需求,需要在別名分析方法的內(nèi)部采用模擬程序進行執(zhí)行,并借助語法樹進行自上而下的分析,同時按照函數(shù)調(diào)動的關系結合深度優(yōu)先的方法,進行激活處理,并對實例構造和成員函數(shù)的調(diào)用進行分析,進而形成對象例化模型。在實際的分析計算中,會出現(xiàn)對已經(jīng)經(jīng)過分析的函數(shù)參數(shù)進行再次綁定的現(xiàn)象,這主要是因為受到遞歸函數(shù)調(diào)用以及循環(huán)語句的影響,進而對程序分析和計算的完備性造成了一定程度的影響,因此需要在前次生成的對象例化模型的基礎上,進行多遍對象別名分析,直至對象例化模型不再變化為止,進而最大限度的提高分析的完備性和準確性。
在對象別名分析的過程中,需要借助綁定時間環(huán)境來對各種變量不同的綁定時間進行合理的記錄,并為每一個變量的綁定時間設置相應的分析標注,一般而言,變量的BTA標志表示了其狀態(tài),而對于引用變量是用專用類名集合進行表示的,進而計算出其最小上界。在別名分析中,語句分析是核心和關鍵,因此需要加強對各種語句的分析,進而得出更新后的BTA環(huán)境。同時需要對語句進行調(diào)用,這就需要先對引用變量指向的所有專用類,求出對象成員和方法參數(shù)的狀態(tài),構成方法例化模式,并檢查該模式的存在形式,形成專用的方法名,進而完成綁定,在對定義體進行合理的分析,并在分析結束后進行保存。同時加強對循環(huán)語句的分析,即進行反復的分析,直到分析前后的BTA環(huán)境相同為止。這種重復分析對象別名分析的計算量有較大影響。假設循環(huán)體中有k個引用型變量被賦值,而每個變量可能綁定到m種專用類對象實例。在實用程序的分析中,分析過程收斂很快,通常僅重復分析2次或3次。因此,如果程序語法樹的結點個數(shù)為n,對象別名分析的計算復雜度為0(n)。
可見,在對擴展對象的別名分析中,實現(xiàn)了綁定時間分析與別名分析的有效結合,這樣可以有效的解決對象類和方法的多變異例化問題,通過對程序中綁定時間的分析,實現(xiàn)了對對象類和方法的有效處理,在例化模型的基礎上,形成了多種版本的程序代碼,用于程序的部分計算。在實際的程序運行中,該方法取得了很好的成效,不僅具有較好的重用性,而且滿足了各種編譯時刻和運行時刻的部分求值的需要,即使帶來了一定的程序膨脹,也可以將其控制在一定的范圍內(nèi),具有可接受性。
4 結束語
Java語言程序例化中的擴展對象別名分析的主要特點在于不僅能夠區(qū)別同一對象中不同成員變量的綁定時間,也能夠區(qū)分不同程序點創(chuàng)建的對象實例,進而能夠區(qū)分成員函數(shù)中同一引用型參數(shù)所綁定的對象實例,從而有效地提高了Java程序綁定時間分析的精度。在Java語言的部分求值系統(tǒng)中,擴展對象別名分析的實現(xiàn)有效地擴大了部分求值的作用范圍。
參考文獻:
[1]冀振燕,程虎.Java編譯程序技術與Java性能[J].軟件學報,2010,11(02).
[2]董強.基于Java語言的安全性分析[J].艦船科學技術,2008,30(02).
[3]顧慶,陳道蓄,謝立,孫鐘秀.面向Java的分布式程序測試系統(tǒng)[J].軟件學報,2012(04).
[4]葉靖波,陸鑫達.基于純Java語言的異構并行處理支持平臺[J].計算機學報,2010(07).
[作者簡介]許云飛(1990-),男,吉林四平,長春工業(yè)大學軟件學院學生,本科,程序設計Java方向。