首页 » Java程序员修炼之道 » Java程序员修炼之道全文在线阅读

《Java程序员修炼之道》第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进程中的过程。