根据计算机的工作原理,计算机只能识别由0或1组成的代码(简称机器码)。机器码非常不利于人类编程,所以人类就发明了汇编语言。汇编语言提供了一系列的助记符以方便编程,然而汇编语言本质上仍然是面向计算机的,汇编语言的编程仍然不符合程序员的工作习惯。所以人类又发明了高级语言,高级语言接近人类的语言,便于人类编程。然而计算机并不认识高级语言,所以高级语言需要转化成目标机器码才能在计算机上执行,转化过程通常需要解释器或者编译器来完成。解释器对高级语言进行解释并在计算机上执行;编译器首先对高级语言进行编译,然后通过链接器对编译后的代码进行链接后再执行。通常来说,解释执行实现简单但执行效率低,编译执行的效率高但实现复杂。
大多数高级语言的执行过程非常类似,例如流行的高级语言C/C++是编译执行,其执行过程非常清晰,涉及编译、加载、链接和执行。而Java语言的执行既涉及解释执行也涉及编译执行,解释执行和编译执行都是通过JVM(Java Virtual Machine,Java虚拟机)进行的。Java语言由JVM负责解释/编译执行,并由JVM内部实现加载、链接、编译和执行,所以理解C/C++的执行过程非常有助于理解Java的执行过程。实际上,JVM在实现Java的执行过程中也借鉴了C++语言编译执行的一些实现。
JVM不仅提供了代码的执行,还提供了Java语言运行时内存的管理,因为内存中垃圾对象具有自动释放功能,大大减轻了程序员管理内存的压力,避免了内存泄露、内存越界访问等常见问题,使得Java语言成为最流行的编程语言之一。
第一部分主要介绍一些基础知识,分为两章:
第1章介绍Java代码是如何执行的。在程序的执行过程中,首先通过C语言的执行过程介绍编译器和操作系统如何协调执行代码,随后介绍编译器如何支持C++面向对象的功能以及C++是如何执行的,最后介绍JVM是如何执行Java代码的。本章偏重于介绍计算机的基础知识,如果读者有相关背景,可以跳过本章。
第2章介绍JVM中垃圾回收涉及的基础知识,主要介绍垃圾回收的基本算法,以及实现垃圾回收需要用到的相关知识。