面试阿里我竟然倒在这一JVM面试题下

本文作者在阿里面试中遭遇JVM垃圾回收问题,由此整理了22道JVM面试核心问题,涵盖内存分配、运行时数据区、垃圾回收机制、调优工具与参数等,旨在帮助Java开发者准备跳槽面试。包括JVM内存结构、垃圾回收算法、CMS回收器、对象回收判断等重点内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试阿里我竟然倒在这一JVM面试题下

 

面试阿里我竟然倒在这一JVM面试题下

 

前言:

面试阿里倒在了JVM垃圾回收机制,何时触发MinorGC等操作这道面试题下,回去重新刷了一遍常问的JVM面试题,特意整理出22道分享给大家。八月已经来临了,离跳槽高峰金九银十还远嘛,是时候为了跳槽为了高薪奋斗了,后续也会更新更多各方面的面试题,大家记得关注我哦,由于篇幅的限制本文只有前十个在文章中带答案,之后的需要答案的可以关注我的公众号 Java周某人

1.JVM内存分配

面试阿里我竟然倒在这一JVM面试题下

 

面试阿里我竟然倒在这一JVM面试题下

 

2.JVM的主要组成部分及其作用?

类加载器 ClassLoader:Java代码 -----> 字节码 的编译过程

运行时数据区:把上一步编译得到的字节码加载到内存中

执行引擎:命令解析器,解析上一步加载而来的字节码,翻译成为系统指令,交由CPU执行

本地库接口 Native Interface:诸如IO之类的由其他语言写成的本地库接口

3.JVM运行时数据区包含哪些?

程序计数器:行号指示器,通过改变该值,以选取下一步的指令

Java虚拟机栈:局部变量、方法出口等,为JVM服务

本地方法栈:局部变量、方法出口等,为本地Native方法服务

堆区:内存最大的一块,所有的对象实例都在这里分配内存

方法区:常量、静态变量等

4. JVM垃圾回收机制,何时触发MinorGC等操作

分代垃圾回收机制:不同的对象生命周期不同。把不同生命周期的对象放在不同代上,不同代上采用最合适它的垃圾回收方式进行回收。

JVM中共划分为三个代:年轻代、年老代和持久代,

年轻代:存放所有新生成的对象;

年老代:在年轻代中经历了N次垃圾回收仍然存活的对象,将被放到年老代中,故都是一些生命周期较长的对象;

持久代:用于存放静态文件,如Java类、方法等。

新生代的垃圾收集器命名为“minor gc”,老生代的GC命名为”Full Gc 或者Major GC”.其中用System.gc()强制执行的是Full Gc.

判断对象是否需要回收的方法有两种:

1.引用计数

当某对象的引用数为0时,便可以进行垃圾收集。

2.对象引用遍历

果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。

触发GC(Garbage Collector)的条件:

1)GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。

2)Java堆内存不足时,GC会被调用。

5.JVM的垃圾回收算法:

标记-清除:无用对象全部干掉

标记-整理:有用对象都向一边移动,边界以外的全部干掉

复制算法:左边内存快满时,将其中要保留的对象复制到右边内存中,然后整体干掉左边内存。右边同理,内存利用率仅有一半

分代算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。

6.JVM 调优的工具?

JDK 自带了很多监控工具,都位于 JDK 的 bin 目录下,其中最常用的是 jconsole 和 jvisualvm 这两款视图监控工具。

• jconsole:用于对 JVM 中的内存、线程和类等进行监控;

• jvisualvm: JDK 自带的全能分析工具,可以分析:内存快照、线程快照、程序死锁、监控内存的变化、 gc 变化等。

7.常用的JVM调优参数?

• -Xms2048M最小内存2048M

• -Xmx2048M最大内存2048M

• -XX:NewRatio=4设置年轻的和老年代的内存比例为 1:4

• -XX:SurvivorRatio=8设置新生代 Eden 和 Survivor 比例为 8:2

• -XX:+UseConcMarkSweepGC指定使用 CMS + Serial Old 垃圾回收器组合;

• -XX:+PrintGC开启打印 gc 信息;

• -XX:+PrintGCDetails打印 gc 详细信息。

8.堆栈的区别?

栈内存存储的是局部变量,堆内存存储的是实体;

栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

9.详细介绍一下 CMS 垃圾回收器?

CMS 是英文 Concurrent Mark-Sweep 的简称,是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动 JVM 的参数加上“-XX:+UseConcMarkSweepGC”来指定使用 CMS 垃圾回收器。

CMS 使用的是标记-清除的算法实现的,所以在 gc 的时候回产生大量的内存碎片,当剩余内存不能满足程序运行要求时,系统将会出现 Concurrent Mode Failure,临时 CMS 会采用 Serial Old 回收器进行垃圾清除,此时的性能将会被降低。

10.怎么判断对象是否可以被回收?

引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题;

可达性分析:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。

11.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

12.GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?

13.java类加载过程?

14.什么是类加载器,类加载器有哪些?

15.Eden和Survivor的比例分配等

16.volatile的语义,它修饰的变量一定线程安全吗

17.JVM 对象创建步骤流程是什么?

18.什么是 Class 文件? Class 文件主要的信息结构有哪些?

19.什么是内存溢出,内存泄漏

20.如何阻止内存泄漏?

21.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗? 有什么办法主动通知虚拟机进行垃圾回收?

22.深拷贝和浅拷贝。

23.System.gc() 和 Runtime.gc() 会做什么事情?

最后重申一下欢迎做Java的工程师朋友们可以关注我的公众号 Java周某人 免费获取这写些面试题剩下的答案,还有更多免费的Java架构学习资料,其中覆盖了互联网的方方面面,期间碰到各种产品各种场景下的各种问题,希望可以帮助大家扩展自己的技术广度和知识面。

记得一定要关注我哦,会不定时的福利赠送,包括整理的面试题,学习资料,源码等~~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值