讀古今文學網 > Java程序員修煉之道 > 第5章 類文件與字節碼 >

第5章 類文件與字節碼

內容提要

  • 類加載
  • 方法句柄
  • 解剖類文件
  • JVM字節碼以及它的重要性
  • 新的操作碼invokedynamic

要成為優秀的Java開發人員,需要深入理解Java平台的工作方式。其中就包括類加載和JVM字節碼這樣的核心特性。

假設有一個大量使用依賴注入(DI)技術的應用程序,比如Spring,它在啟動時出了問題,報了一個神秘的錯誤信息。如果不是簡單的配置錯誤問題,你就需要瞭解如何實現DI框架才能跟蹤問題來源。也就是說你得明白類加載機制。

或者假定跟你合作的開發商跑路了,只給你留下了一堆編譯過的代碼,沒有源碼,文檔也亂七八糟的。你怎麼能知道編譯過的代碼包含了什麼呢?

最常見的程序啟動失敗錯誤就是ClassNotFoundExceptionNoClassDefFoundError,但很多開發人員都不知道它們是什麼,有什麼區別以及為什麼會出現。

本章重點就是這些與開發相關的平台特性。此外還會討論一些高級特性——它們是為Java的粉絲準備的,如果你時間有限,可以跳過那部分內容。

我們會從類加載的概覽開始,這是VM為運行中的程序定位和激活新類型的過程。其核心是在VM中表示類型的Class對象。接下來我們會介紹一下新的方法句柄API,並和Java 6中已有的技術(比如反射)進行比較。

之後我們會討論檢查和分析類文件的工具。用Oracle JDK提供的javap作為參考工具。上過類文件的解剖課後,我們會轉而討論字節碼,其中涉及JVM操作碼的主要體系以及運行時的底層操作。

在你用字節碼的知識把自己武裝起來之後,我們會深入探討invokedynamic操作碼,它是Java 7新引入進來的,為的是讓非Java語言能充分利用JVM的平台特性。

我們先從類加載開始吧,這是一個將新的類合併到正在運行著的JVM進程中的過程。