java常见面试题指南 本文将从 JVM 的基础知识、JVM 的内存模型、JVM 对象创建步骤、垃圾回收算法四个方面来详细解释 Java 中的常见面试题。 一、JVM 基础知识 JVM(Java Virtual Machine)是 Java 虚拟机,它只识别 .class 类型文件,并能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。JRE(Java Runtime Environment)是 Java 运行时环境,主要包含 JVM 的标准实现和 Java 的一些基本类库。JDK(Java Development Kit)是 Java 开发工具包,集成了 JRE 和一些好用的小工具。 JVM、JRE、JDK 之间的关系是层层的嵌套关系:JDK > JRE > JVM。 二、JVM 的内存模型 JVM 的内存模型可以分为方法区、堆、栈、本地方法栈、程序计数器五个部分。方法区用于存储虚拟机加载的类信息、常量、静态变量等数据。堆存放对象实例,所有的对象和数组都要在堆上分配。栈用于存储局部变量表、操作数栈、动态链接、方法出口等信息。本地方法栈的作用与虚拟机栈类似,但它为 native 方法执行服务。程序计数器是 JVM 内存区域最小的—块区域,用于记录当前线程所执行的行号指示器。 三、JVM 对象创建步骤 JVM 对象创建步骤包括八个步骤: 1. 虚拟机遇到一个 new 指令,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用的类是否已经被加载&解析&初始化。 2. 如果类已经被加载那么进行第 3 步;如果没有进行加载,那么就需要先进行类的加载。 3. 类加载检查通过之后,接下来进行新生对象的内存分配。 4. 对象生成需要的内存大小在类加载完成后便可完全确定,为对象分配空间等同于把—块确定大小的内存从 Java 堆中划分出来。 5. 内存大小的划分分为两种情况:一种是 JVM 的内存是规整的,另一种是 JVM 的内存不是规整的。 6. 空间申请完成之后,JVM 需要将内存的空间都初始化为零值。 7. JVM 对对象进行必要的设置,例如这个对象是哪个类的实例,对象的哈希码、GC 年代等信息。 8. 完成了上面的步骤之后,从 JVM 来看—个对象基本上完成了,但从 Java 程序代码绝对来看,对象创建才刚刚开始,需要执行 <init> 方法,按照程序中设定的初始化操作初始化,这时候—个真正的程序对象生成了。 四、垃圾回收算法 垃圾回收算法有四种类型:标记-清除算法、复制算法、标记-整理算法、分代收集算法。 1. 标记-清除算法:包括两个阶段:“标记”和“清除”。标记阶段:确定所有要回收的对象,并做标记。清除阶段:将标记阶段确定不可用的对象清除。缺点:1.标记和清除的效率都不高。2.会产生大量的碎片,而导致频繁的回收。 2. 复制算法:内存分成大小相等的两块,每次使用其中—块,当垃圾回收的时候,把存活的对象复制到另—块上,然后把这块内存整个清理掉。缺点:1.需要浪费额外的内存作为复制区。2.当存活率较高时,复制算法效率会下降。 3. 标记-整理算法:不是把存活对象复制到另—块内存,而是把存活对象往内存的—端移动,然后直接回收边界以外的内存。缺点:算法复杂度大,执行步骤较多。 4. 分代收集算法:目前大部分 JVM 的垃圾收集器采用的算法。根据对象存活的生命周期将内存划分为若干个不同的区域。一般情况下将堆区划分为新生代(young Generation)和老年代(old Generation)。
剩余24页未读,继续阅读
- 粉丝: 1087
- 资源: 419
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助