2014年6月8日
摘要: 歡迎來到“Under The Hood”第七期。本期我們介紹JVM處理finally子句的方式及相關(guān)字節(jié)碼。你可能需要閱讀往期的文章才能更好的理解本文。
finally子句
JVM執(zhí)行Java字節(jié)碼時(shí),它有幾種方式可以退出一個(gè)代碼塊(花括號(hào)中間的語句)。其中之一,就是簡單的執(zhí)行完其中所有的語句,然后退出代碼塊。第二種,JVM可能會(huì)在代碼塊中間的任何一處,遇到像break,continue,return之類的語句,強(qiáng)制它跳出該代碼塊。第三種,JVM可能會(huì)在執(zhí)行過程中,出現(xiàn)了異常,然后它跳轉(zhuǎn)到匹配的catch子句,或者沒有找到相應(yīng)的catch子句,直接退出當(dāng)前線程。由于單個(gè)代碼塊有如此多的潛在退出點(diǎn)(exit point),擁有一個(gè)簡單的方式來表達(dá)“無論代碼塊以什么方式退出,有些事情總能發(fā)生”是很值得的。然后就有了try-finally子句。
閱讀全文
2014年6月2日
摘要: 歡迎來到“Under The Hood”第六期。本期我們介紹JVM處理異常的方式,包括如何拋出和捕獲異常及相關(guān)的字節(jié)碼指令。但本文不會(huì)討論finally子句,這是下期的主題。你可能需要閱讀往期的文章才能更好的理解本文。
異常處理
在程序運(yùn)行時(shí),異常讓你可以平滑的處理意外狀況。為了演示JVM處理異常的方式,考慮NitPickyMath類,它提供對(duì)整數(shù)進(jìn)行加,減,乘,除以及取余的操作。
閱讀全文
2014年5月30日
摘要: 歡迎來到“Under The Hood”第五期。本期我們來看看JVM中處理對(duì)象和數(shù)組的字節(jié)碼。你可能需要閱讀往期的文章才能更好的理解本文。
閱讀全文
2014年5月26日
摘要: JVM支持IEEE-754浮點(diǎn)數(shù)標(biāo)準(zhǔn)(1985)。該標(biāo)準(zhǔn)定義了32位和64位浮點(diǎn)數(shù)的格式,以及在此之上的各種運(yùn)算。在JVM中,浮點(diǎn)運(yùn)算是基于32位float數(shù)和64位double數(shù)的。對(duì)每個(gè)操作float數(shù)的字節(jié)碼,都有一個(gè)對(duì)應(yīng)的操作double數(shù)的版本。
閱讀全文
2014年5月22日
摘要: 字節(jié)碼是JVM的機(jī)器語言。JVM加載類文件時(shí),對(duì)類中的每個(gè)方法,它都會(huì)得到一個(gè)字節(jié)碼流。這些字節(jié)碼流保存在JVM的方法區(qū)中。在程序運(yùn)行過程中,當(dāng)一個(gè)方法被調(diào)用時(shí),它的字節(jié)碼流就會(huì)被執(zhí)行。根據(jù)特定JVM設(shè)計(jì)者的選擇,它們可以通過解釋的方式,即時(shí)編譯(Just-in-time compilation)的方式或其他技術(shù)的方式被執(zhí)行。
閱讀全文
2014年5月19日
摘要: Java類文件(.class文件)是一個(gè)為已編譯Java程序仔細(xì)定義的格式。Java源代碼被編譯成能夠被任何JVM加載和執(zhí)行的類文件。在被JVM加載之前,類文件可能是由網(wǎng)絡(luò)傳輸而來。類文件是獨(dú)立于底層平臺(tái)的,所以適用于更多的地方。它們由簡潔的JVM字節(jié)碼組成,這樣就能輕裝上陣。類文件常常被壓縮,以極快的速度通過網(wǎng)絡(luò),到達(dá)世界各地的JVM。
閱讀全文
2014年5月17日
摘要: JVM(Java虛擬機(jī))是一個(gè)運(yùn)行已編譯Java程序的抽象計(jì)算機(jī)。之所以說是”虛擬“的,是因?yàn)樗凇罢嬲钡挠布脚_(tái)和操作系統(tǒng),一般以軟件的形式實(shí)現(xiàn)。所有的Java程序都為JVM而編譯。因此,在特定平臺(tái)上運(yùn)行已編譯Java程序之前,該平臺(tái)的JVM必須先要被實(shí)現(xiàn)。
閱讀全文
2014年5月16日
摘要: Java開發(fā)者,要想恰當(dāng)?shù)氖褂脿顟B(tài)模式和策略模式,必須清楚的理解它們之間的區(qū)別。雖然狀態(tài)模式和策略模式擁有相似的結(jié)構(gòu),雖然它們都基于SOLID設(shè)計(jì)原則中的O(開閉原則),但是,它們的意圖是完全不同的。
閱讀全文
2014年5月11日
摘要: 上一篇中,你看到了Java中Lambda表達(dá)式的一種形式:參數(shù) + “->” + 表達(dá)式。如果代碼實(shí)現(xiàn)的邏輯一條語句完成不了,你可以寫成類似方法的形式:代碼寫在“{}”中,再加上顯式的return語句。例如:
閱讀全文
摘要: 變量作用域
你經(jīng)常會(huì)想,如果可以在Lambda表達(dá)式里訪問外部方法或類中變量就好了。
閱讀全文