JVM内存 面试题汇总



1. **JVM内存模型的基本组成部分有哪些?**
   - **程序计数器(Program Counter Register)**:记录当前线程执行的字节码指令地址。
   - **Java虚拟机栈(Java Virtual Machine Stack)**:线程私有,存储方法调用时的局部变量表、操作数栈、动态链接、方法出口等信息。
   - **本地方法栈(Native Method Stack)**:与虚拟机栈类似,但服务于本地(native)方法。
   - **堆(Heap)**:所有线程共享,存放几乎所有的对象实例和数组。
   - **方法区(Method Area)/元空间(Metaspace)**(Java 8以后):存储类的元数据信息、常量池、静态变量、即时编译后的代码等。
   
2. **程序计数器的作用是什么?为什么它是线程私有的?**
   - 程序计数器用于记录当前线程执行的字节码位置,是线程私有的因为每个线程都有独立的执行序列,互不影响。

3. **Java虚拟机栈会发生哪些异常?**
   - 主要是`StackOverflowError`(栈溢出,当递归过深或方法调用层级过多时发生)和`OutOfMemoryError`(栈内存耗尽时)。

4. **堆内存分为哪几个区域?**
   - 新生代(Young Generation):包括 Eden 区、两个Survivor区(From和To),主要用于新创建的对象。
   - 老年代(Old/Tenured Generation):用于存放经过多次垃圾回收仍然存活的对象。

5. **什么是Minor GC和Major GC/Full GC?**
   - **Minor GC**:发生在新生代的垃圾收集,清理年轻代的空间。
   - **Major GC** 或 **Full GC**:清理整个堆内存,包括老年代和部分方法区,通常比Minor GC更消耗资源。

6. **为什么Java 8将永久代(PermGen)替换为元空间(Metaspace)?**
   - 解决了永久代容易出现的内存泄漏问题,因为类元数据大小不再受JVM堆大小限制。
   - 元空间使用的是本机内存,避免了Java堆和永久代争抢固定的内存空间。

7. **JVM如何进行内存管理?**
   - 自动内存管理,包括垃圾回收(GC)机制,用于回收不再使用的对象所占的内存空间。
   - 分代收集算法,根据对象生命周期的不同将内存分为不同区域,采用适合的回收策略。

8. **解释垃圾回收算法(如标记-清除、复制、标记-整理)及其优缺点。**
   - **标记-清除**:先标记所有需要回收的对象,再统一回收。优点是简单,缺点是效率低,会产生内存碎片。
   - **复制**:将可用内存分为两份,每次只使用其中一份,当这一份满时,将存活对象复制到另一份,然后清空使用过的那份。优点是效率高,无碎片,缺点是内存利用率低。
   - **标记-整理**(或标记-压缩):首先标记所有活动对象,然后将它们向一端移动,最后清理掉边界以外的内存。优点是解决了内存碎片问题,缺点是需要移动对象,开销较大。

9. **如何监控和调整JVM内存设置?**
   - 使用JVM参数(如-Xms、-Xmx调整堆大小,-XX:MetaspaceSize、-XX:MaxMetaspaceSize调整元空间大小)。
   - 利用工具(如VisualVM、JConsole、Java Mission Control)监控内存使用情况。

10. **JVM如何实现类加载的双亲委派模型?**
    - 当一个类加载器收到类加载请求时,首先尝试委托给父类加载器去加载,如果父类加载器无法加载,则自己尝试加载。这保证了类的唯一性和安全性。


全部评论

相关推荐

一面 56分钟1.自我介绍2.部门介绍 (财务平台-财务科技)部门主要是负责美团这边的发票和税务相关,例如美团需要交多少的税等等3.实习实习持续的时间有多长?在那边主要完成的工作是什么?这些接口是给谁调用的?4.场景题有一张表,里面有三个字段,id,开始时间,结束时间,然后数据量为5000W,怎么统计一天中流量最大的时候有多少条数据?一开始没有明白面试官的意思,询问流量最大的时候是什么意思,面试官告知可以以秒作为单位,统计每秒的最大值。面试官问用sql怎么写?sql不太会写,跟面试官表达不会。然后面试官说这个怎么读取到内存中?然后面试官说怎么用java代码写?本来想使用C++写,被面试官拒绝,只能使用java。然后面试官又提示说可以用什么数据结构去完成?面试官问到差分的原理?面试官没有给环境,要求自己在本地使用代码编辑器共享屏幕写。实现差分代码的编写,过程中遇到了数组扩容问题,在面试官提示下修改代码最后直到他满意。5.八股java中哈希表的相关原理。java中synchronized关键字是否是可重入的synchronized底层是怎么实现的6.个人以后的发展方向是什么样子的?7.反问部门的具体业务?财务统计报表相关面试的流程?可能会有3-4面二面  50分钟1.部门介绍2.自我介绍3.实习3.1 实习持续的时间不到两个月吧?3.2 为什么在那边只呆了这么短时间?3.3 这个项目主要是干什么的?3.4 这个消息推送功能应该公司内部非常成熟才对?3.5 同步转成异步这一块是怎么做的?3.6 这个项目感觉不是偏向于业务方面,是偏向于改进方面的是吗?4.八股4.1线程池是怎么创建的?4.2线程池中的每个参数有什么用?4.3 你在项目中是怎么使用线程池的?5. 算法题统计频次最大的数字(大数据场景)6. 生活6.1 有没有获得过什么奖项?有一些数学竞赛的奖项6.2 有没有过社团经验,具体讲讲有什么收获?6.3 做过的一件比较有成就的事情是什么,展开讲讲?6.4 如果你现在要学习一门新的技术,你的方法是什么?7.反问7.1 部门这边具体的业务是什么样子的,具体会用到哪些技术栈?部门这边处理公司税务报表,同时也需要使用大数据来对数据进行分析等等。7.2 面试的流程是什么样子的?听说还有hr面
查看28道真题和解析
点赞 评论 收藏
分享
3 9 评论
分享
牛客网
牛客企业服务