當前位置:學問君>學習教育>畢業論文>

淺談Java虛擬機異常處理論文

學問君 人氣:2.56W

1異常的分類

淺談Java虛擬機異常處理論文

1.1編譯時異常(checked異常)

Java認爲checked異常都是可以再編譯階段被處理的異常,所以它強制程序處理所有的checked異常,而Runtime異常無需處理,java程序必須顯示處理checked異常,如果程序沒有處理,則在編譯時會發生錯誤,無法透過編譯。checked異常體現了java設計哲學:沒有完善處理的代碼根本不會被執行,體現了java的嚴謹性,對於構造大型、健壯、可維護的應用系統而言,錯誤處理是整個應用需要考慮的重要方面。Java異常處理機制,在程序執行出現意外時,系統會生成一個Exception對象來通知程序,從而實現將“業務功能實現代碼”和“錯誤處理代碼”分離,提供更好的可讀性。如果執行try塊裏的業務邏輯代碼時出現異常,系統會自動生成一個異常對象,該異常對象被提交給執行環境,這個過程被稱爲拋出(throw)異常。Java環境收到異常對象時,會尋找合適的catch塊,如果找不到,java執行環境就會終止,java程序將退出1.2執行時異常(Runtime異常)

執行時異常可以不處理。當出現這樣的異常時,總是由虛擬機接管。比如我們從來沒有人去處理過Null Pointer Exception異常,它就是執行時異常,並且這種異常還是最常見的異常之一。出現執行時異常後,系統會把異常一直往上層拋,一直遇到處理代碼。如果沒有處理塊,到最上層,如果是多線程就由()拋出,如果是單線程就被main()拋出。拋出之後,如果是線程,這個線程也就退出了。如果是主程序拋出的異常,整個程序也就退出了。執行時異常是Exception的子類,也有一般異常的特點,是可以被Catch塊處理的。只不過往往不對它處理罷了。也就是說,如果不對執行時異常進行處理,那麼出現執行時異常之後,要麼是線程中止,要麼是主程序終止。

2虛擬機的特性及異常處理

Java虛擬機(Java Virtual Machine)簡稱JVM Java,虛擬機是一個想象中的機器,在實際的計算機上透過軟件模擬來實現。Java虛擬機有自己想象中的硬件,如處理器、堆棧、寄存器等,還具有相應的指令系統。

(1)JVM寄存器。所有的CPU均包含用於儲存系統狀態和處理器所需資訊的寄存器組。如果虛擬機定義較多的寄存器,便可以從中得到更多的資訊而不必對棧或內存進行訪問,這有利於提高執行速度。然而,如果虛擬機中的寄存器比實際CPU的寄存器多,在實現虛擬機時就會佔用處理器大量的時間來用常規存儲器模擬寄存器,這反而會降低虛擬機的效率。針對這種情況,JVM只設定了4個最爲常用的寄存器。

(2)JVM棧結構。作爲基於棧結構的計算機,Java棧是JVM存儲資訊的主要方法。當JVM得到一個java字節碼應用程序後,便爲該代碼中一個類的每一個方法創建一個棧框架,以儲存該方法的狀態資訊。每個棧框架包括以下三類資訊:局部變量執行環境操作數棧局部變量用於存儲一個類的方法中所用到的局部變量。vars寄存器指向該變量表中的第一個局部變量。執行環境用於儲存解釋器對Java字節碼進行解釋過程中所需的資訊。它們是:上次調用的方法、局部變量指針和操作數棧的棧頂和棧底指針。執行環境是一個執行一個方法的控制中心。

(3)JVM碎片回收堆。Java類實例所需的.存儲空間是在堆上分配的。解釋器具體承擔爲類實例分配空間的工作。解釋器在爲一個實例分配完存儲空間後,便開始記錄對該實例所佔用的內存區域的使用。一旦對象使用完畢,便將其回收到堆中。在Java語言中,除了new語句外沒有其他方法爲一對象申請和釋放內存。對內存進行釋放和回收的工作是由Java執行系統承擔的。這允許Java執行系統的設計者自己決定碎片回收的方法。在SUN公司開發的Java解釋器和HotJava環境中,碎片回收用後臺線程的方式來執行。這不但爲執行系統提供了良好的性能,而且使程序設計人員擺脫了自己控制內存使用的風險。

3結語

通常情況下,程序會很少自行拋出系統異常,因爲異常的類名通常包含了該異常的有用資訊,所以在選擇拋出什麼異常時,應該選擇合適的異常類,從而可以明確地描述異常情況,這樣程序常常需要定義異常類。對於執行時異常,我們不要用h來捕獲處理,而是在程序開發調試階段,儘量去避免這種異常,一旦發現該異常,正確的做法就會改進程序設計的代碼和實現方式,修改程序中的錯誤,從而避免這種異常。捕獲並處理執行時異常是好的解決辦法,因爲可以透過改進代碼實現來避免該種異常的發生。