1 / 42
文档名称:

java程序员面试所需知识.pdf

格式:pdf   大小:592KB   页数:42页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

java程序员面试所需知识.pdf

上传人:1557281760 2017/9/18 文件大小:592 KB

下载得到文件列表

java程序员面试所需知识.pdf

相关文档

文档介绍

文档介绍:JAVA 方面
1、 JVM
1、Java 技术与 Java 虚拟机
说起 Java,人们首先想到的是 Java 编程语言,然而事实上,Java 是一种技术,它由四方面组成: Java 编程语言、Java 类文件格式、Java 虚拟机和 Java 应用程
序接口(Java API),它们的关系如下图所示:

图1 Java 四个方面的关系
运行期环境代表着 Java 平台,开发人员编写 Java 代码(.java 文件),然后将之编译成字节码(.class 文件)。最后字节码被装入内存,一旦字节码进入虚拟机,它就
会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。从上图也可以看出 Java 平台由 Java 虚拟机和 Java 应用程序接口搭建,Java 语言则是
进入这个平台的通道,用 Java 语言编写并编译的程序可以运行在这个平台上。这个平台的结构如下图所示:
在 Java 平台的结构中, 可以看出,Java 虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。它的下方是移植接口,移植接口由两部分组成:
适配器和 Java 操作系统, 其中依赖于平台的部分称为适配器;JVM 通过移植接口在具体的平台和操作系统上实现;在 JVM 的上方是 Java 的基本类库和扩展类库以
及它们的 API, 利用 Java API 编写的应用程序(application) 和小程序(Java applet) 可以在任何 Java 平台上运行而无需考虑底层平台, 就是因为有 Java 虚拟机(JVM)
实现了程序与操作系统的分离,从而实现了 Java 的平台无关性。JVM 在它的生存周期中有一个明确的任务,那就是运行 Java 程序,因此当 Java 程序启动的时候,
就产生 JVM 的一个实例;当程序运行结束的时候,该实例也跟着消失了。下面我们从 JVM 的体系结构和它的运行过程这两个方面来对它进行比较深入的研究。
2、Java 虚拟机的体系结构
刚才已经提到,JVM 可以由不同的厂商来实现。由于厂商的不同必然导致 JVM 在实现上的一些不同,然而 JVM 还是可以实现跨平台的特性,这就要归功于设计 JVM
时的体系结构了。一个 JVM 实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、数据类型和指令这些部分,它们描述了 JVM 的一个抽象的内部体系结
构,其目的不光规定实现 JVM 时它内部的体系结构,更重要的是提供了一种方式,用于严格定义实现时的外部行为。每个 JVM 都有两种机制,一个是装载具有合适
名称的类(类或是接口),叫做类装载子系统;另外的一个负责执行包含在已装载的类或接口中的指令,叫做运行引擎。每个 JVM 又包括方法区、堆、 Java 栈、程序
计数器和本地方法栈这五个部分,这几个部分和类装载机制与运行引擎机制一起组成的体系结构图为:
图3 JVM 的体系结构
JVM 的每个实例都有一个它自己的方法域和一个堆,运行于 JVM 内的所有的线程都共享这些区域;当虚拟机装载类文件的时候,它解析其中的二进制数据所包含
的类信息,并把它们放到方法域中;当程序运行的时候,JVM 把程序初始化的所有对象置于堆上;而每个线程创建的时候,都会拥有自己的程序计数器和 Java 栈,
其中程序计数器中的值指向下一条即将被执行的指令,线程的 Java 栈则存储为该线程调用 Java 方法的状态;本地方法调用的状态被存储在本地方法栈,该方法栈依
赖于具体的实现。下面分别对这几个部分进行说明。
执行引擎处于 JVM 的核心位置,在 Java 虚拟机规范中,它的行为是由指令集所决定的。尽管对于每条指令,规范很详细地说明了当 JVM 执行字节码遇到指令时,
它的实现应该做什么,但对于怎么做却言之甚少。Java 虚拟机支持大约 248 个字节码。每个字节码执行一种基本的 CPU 运算,例如,把一个整数加到寄存器,子程序转
移等。Java 指令集相当于 Java 程序的汇编语言。
Java 指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有 0 个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节
的操作符构成。
虚拟机的内层循环的执行过程如下:
do{
取一个操作符字节;
根据操作符的值执行一个动作;
}while(程序未结束)
由于指令系统的简单性,使得虚拟机执行的过程十分简单,从而有利于提高执行的效率。指令中操作数的数量和大小是由操作符决定的。如果操作数比一个字节大,那
么它存储的顺序是高位字节优先。例如,一个 16 位的参数存放时占用两个字节,其值为: