JVM面试合集

前言

前文介绍了数据库、中间件相关。本期我们继续学习Java特性的JVM。

JVM面试合集

  1. JVM的架构组成是怎样的?

JVM主要由**类加载器(ClassLoader)、运行时数据区(Runtime Data Area)、执行引擎(Execution Engine)和垃圾收集器(Garbage Collector)**组成。其中,类加载器负责加载Java类;运行时数据区包括堆、栈、方法区等内存区域;执行引擎负责执行字节码;垃圾收集器负责回收不再使用的内存。

  1. JVM的内存模型是怎样的?

JVM的内存模型主要包括堆、栈、方法区和本地方法栈等部分。堆是JVM所管理的最大一块内存区域,主要用于存放各种对象实例;栈是每个线程私有的一块内存区域,用于存储局部变量、操作数栈、动态链接、方法出口等信息;方法区用于存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;本地方法栈与栈类似,不过它是为Native方法服务的。

  1. 描述一下JVM加载class文件的原理机制?

JVM加载class文件的原理机制主要包括加载、链接和初始化三个阶段。加载阶段主要是通过类加载器将class文件加载到内存中,生成对应的Class对象;链接阶段包括验证、准备和解析三个步骤,主要是对字节码进行校验、为字段分配内存并设置初始值、将符号引用转换为直接引用等处理初始化阶段主要是对类的静态字段进行初始化。

  1. JVM的垃圾回收算法有哪些?

JVM的垃圾回收算法主要包括标记-清除算法、复制算法、标记-整理算法和分代收集算法。标记-清除算法是最基础的垃圾回收算法,它通过标记需要回收的对象并清除它们来回收内存;复制算法将内存分为两个区域,每次只使用其中一个区域,当该区域内存使用完时,将存活的对象复制到另一个区域中;标记-整理算法在标记-清除算法的基础上进行了优化,通过移动存活对象来消除内存碎片;分代收集算法根据对象存活周期的不同将内存划分为不同的区域,采用不同的垃圾回收算法进行回收。

  1. 你知道哪些垃圾收集器,各自的特点?

Java中的垃圾收集器主要包括Serial收集器、ParNew收集器、Parallel收集器、Cms收集器和G1收集器等。Serial收集器是单线程的,它在进行垃圾收集时会暂停所有用户线程;ParNew收集器是Serial收集器的多线程版本,它可以利用多个CPU核心进行垃圾收集;Parallel收集器也称为吞吐量优先收集器,它以并行的方式进行垃圾收集,并关注吞吐量;Cms收集器是一种以获取最短回收停顿时间为目标的收集器,它基于标记-清除算法实现;G1收集器是一种面向服务端应用的垃圾收集器,它将堆内存划分为多个独立的子区域,并可以预测停顿时间。

  1. 介绍一下JVM中的类加载机制,双亲委派模型是什么?

JVM中的类加载机制是指将Java类的字节码文件加载到内存中,并生成对应的Class对象的过程。类加载机制主要包括加载、链接和初始化三个阶段。在类加载过程中,JVM采用了双亲委派模型来保证类的唯一性和安全性。双亲委派模型是指当一个类加载器收到类加载请求时,它不会自己去加载这个类,而是将这个请求委派给父类加载器去完成。只有当父类加载器无法完成这个加载请求时,子类加载器才会尝试自己去加载。这样可以避免类的重复加载和一些安全问题。

  1. Java对象创建过程是怎样的?

Java对象的创建过程主要包括类加载、内存分配、初始化和返回对象引用等步骤。首先,JVM需要加载类的字节码文件并生成对应的Class对象;然后,在堆内存中为对象分配内存空间,并初始化对象的属性值和状态;最后,返回对象的引用给调用者。在对象创建过程中,JVM还会进行一些优化处理,如即时编译、逃逸分析等,以提高程序的执行效率。

  1. 描述一下Java内存模型(JMM)?

Java内存模型(JMM)是Java虚拟机规范中定义的一种内存模型,它描述了Java程序中线程之间的内存可见性和同步行为。JMM规定了所有的变量都存储在主内存中,而每个线程都有自己的工作内存。线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。JMM通过定义一系列的Happens-Before规则来保证多线程之间的内存可见性和有序性。

  1. 在工作中遇到jvm相关的问题?

A. Cms的触发参数配置太大,导致内存占比很高时未触发fgc
B. 默认GC配置是Parallel New + Old,需要通过参数配置才可使用ParNew + CMS 配置
C. 要配置gc日志和观察gc频率分析内存使用的合理性

你可能感兴趣的:(面试合集,jvm)