JVM必会面试题

JVM组成

1、JVM介绍

2、说一下运行时数据区

3、什么是程序计数器

程序计数器:每个线程会通过程序计数器记录 当前要执行的字节码指令的地址,内部保存的字节码的行号。

案例1:idea集成终端中运行javap -v xx.class命令,打印堆栈大小,局部变量的数量和方法的参数,主要看下图的code部分,这部分是java源代码转换为class字节码后的代码:

案例2:

4、详细介绍下Java堆

堆是线程共享的区域;并且被划分为年轻代和老年代:

jdk1.7和jdk1.8堆的区别:

如图:

5、虚拟机栈

先来看一下什么是虚拟机栈:
栈帧包含的三部分内部:

6、本地方法栈:

7、关于虚拟机栈的几个面试题

8、能不能解释一下方法区

9、听过直接存内存吗?

类加载器

1、什么是类加载器,类加载器有哪些

2、什么是双亲委派模型

下图中的Student类最终会被AppClassLoader加载,String会被BootStrap ClassLoader加载器加载。

JVM为什么采用双亲委派机制

3、说一下类装载的执行过程?

暂空。

垃圾回收

垃圾回收是对堆内存中的对象进行回收

1、对象什么时候会被垃圾回收

如果一个或多个对象没有任何的引用指向它了,那么它现在就是垃圾,就有可能被垃圾回收器回收。

分析哪些对象是垃圾的两种办法:

引用计数法:一个对象被引用了一次 ,则在当前对象上增加一次引用次数如果这个对象没有被引用了(即对象的引用次数为0)则代表这个对象可回收

缺点:

  • 只要有引用,不管是对象外,还是对象内有属性引用,引用次数都会加1

当将a和b置空后:

可达性分析算法:

扫描堆中的实例对象,沿着以 GC Root对象 为起点的引用链去找对象,找不到的对象就代表可以回收。

2、JVM垃圾回收的算法

标记清除法

标记清除算法得核心思想分为两个阶段:

  1. 标记阶段 ,将所有存活得对象进行标记。Java中使用可达性分析算法,从GC Root沿着引用链遍历出所有存活的对象,并标记它们。
  2. 清除阶段,从内存中删除没有被标记的对象,也就是非存活对象

标记整理算法

标记整理算法,是对标记清理算法中容易产生内存碎片问题的解决方案:

  1. 标记阶段,将所有存活的对象进行标记。Java中使用可达性分析算法,从GC Root开始沿着引用链遍历出所有存活的对象。
  2. 整理阶段,将存活对象移动到堆的一端,清理掉没有被标记的对象。

复制算法

将堆内存划分为两块空间,from和to。

分代回收算法

流程讲解:

最后将新的对象放入到Eden区。

3、JVM有哪些垃圾回收器

第一个组合

在垃圾回收的时候用户进程会停止下来

第二个组合

在垃圾回收的时候用户进程会停止下来

ParNew垃圾回收器

老年代CMS垃圾回收器

显著的特点:用户线程和垃圾回收线程可以一起并发工作,但由于其缺点,在jdk9之后就被淘汰了

下图中,第一个缺点是最重要的:

G1垃圾回收器

相关推荐
贺国亚3 分钟前
Agent 框架 · LangChain / LangGraph / AutoGen / CrewAI
面试
过期动态4 分钟前
【LeetCode 热题 100】接雨水
java·数据结构·算法·leetcode·职场和发展
青山师27 分钟前
动态规划算法深度解析:从状态转移方程到工业级优化
数据结构·算法·面试·动态规划·代理模式·java面试
zhangjw3430 分钟前
第15篇:Java多线程零基础入门,进程线程、线程创建方式、线程生命周期、线程安全彻底吃透
java·开发语言·面试
Raink老师30 分钟前
【AI面试临阵磨枪-086】什么是 AI Agent Skill?与传统 Function Calling、Tool 的区别?
人工智能·面试·职场和发展
李剑一2 小时前
小红书前端架构面试问的挺深入啊!面试官:Vue中组合式API与选项式API的设计权衡
vue.js·面试
better_liang3 小时前
每日Java面试场景题知识点之-如何设计分布式锁
java·redis·zookeeper·面试·分布式锁
kyriewen3 小时前
面试8家前端岗位后,我发现了一个残酷的事实:AI不是加分项,是门槛
前端·javascript·面试
用户887665426633 小时前
Git 和 GitHub 入门:从版本控制到团队协作,一篇文章讲清楚
面试·github
凯瑟琳.奥古斯特4 小时前
子查询原理与实战案例解析
开发语言·数据库·职场和发展·数据库开发