2014年5月19日
摘要: 歡迎來到“Under The Hood”第七期。本期我們介紹JVM處理finally子句的方式及相關字節碼。你可能需要閱讀往期的文章才能更好的理解本文。
finally子句
JVM執行Java字節碼時,它有幾種方式可以退出一個代碼塊(花括號中間的語句)。其中之一,就是簡單的執行完其中所有的語句,然后退出代碼塊。第二種,JVM可能會在代碼塊中間的任何一處,遇到像break,continue,return之類的語句,強制它跳出該代碼塊。第三種,JVM可能會在執行過程中,出現了異常,然后它跳轉到匹配的catch子句,或者沒有找到相應的catch子句,直接退出當前線程。由于單個代碼塊有如此多的潛在退出點(exit point),擁有一個簡單的方式來表達“無論代碼塊以什么方式退出,有些事情總能發生”是很值得的。然后就有了try-finally子句。
閱讀全文
摘要: 歡迎來到“Under The Hood”第六期。本期我們介紹JVM處理異常的方式,包括如何拋出和捕獲異常及相關的字節碼指令。但本文不會討論finally子句,這是下期的主題。你可能需要閱讀往期的文章才能更好的理解本文。
異常處理
在程序運行時,異常讓你可以平滑的處理意外狀況。為了演示JVM處理異常的方式,考慮NitPickyMath類,它提供對整數進行加,減,乘,除以及取余的操作。
閱讀全文
摘要: 歡迎來到“Under The Hood”第五期。本期我們來看看JVM中處理對象和數組的字節碼。你可能需要閱讀往期的文章才能更好的理解本文。
閱讀全文
摘要: JVM支持IEEE-754浮點數標準(1985)。該標準定義了32位和64位浮點數的格式,以及在此之上的各種運算。在JVM中,浮點運算是基于32位float數和64位double數的。對每個操作float數的字節碼,都有一個對應的操作double數的版本。
閱讀全文
摘要: 字節碼是JVM的機器語言。JVM加載類文件時,對類中的每個方法,它都會得到一個字節碼流。這些字節碼流保存在JVM的方法區中。在程序運行過程中,當一個方法被調用時,它的字節碼流就會被執行。根據特定JVM設計者的選擇,它們可以通過解釋的方式,即時編譯(Just-in-time compilation)的方式或其他技術的方式被執行。
閱讀全文
摘要: Java類文件(.class文件)是一個為已編譯Java程序仔細定義的格式。Java源代碼被編譯成能夠被任何JVM加載和執行的類文件。在被JVM加載之前,類文件可能是由網絡傳輸而來。類文件是獨立于底層平臺的,所以適用于更多的地方。它們由簡潔的JVM字節碼組成,這樣就能輕裝上陣。類文件常常被壓縮,以極快的速度通過網絡,到達世界各地的JVM。
閱讀全文