Java虚拟机5大核心知识点,RocketMQ消费者是如何获取消息的

本文详细介绍了Java虚拟机的工作原理,包括字节码的解释执行与即时编译,类的加载、链接与初始化过程,垃圾回收的机制及分代思想,以及Java内存模型对执行顺序的影响。重点阐述了HotSpot虚拟机的混合执行模式,类加载的双亲委派模型,以及不同垃圾回收器如G1和ZGC的特点。

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

Java字节码无法直接直接,需要JVM将其翻译成机器码。

在 HotSpot 里面,翻译过程有两种形式:第一种是解释执行,相当于同声传译,即每解析一条字节码,便翻译成机器码并执行;第二种是即时编译(Just-In-Time compilation,JIT),则相当于线下翻译,即将整个方法中所包含的字节码统一翻译成机器码后在执行。前者的优势在于无需等待编译,而后者的优势在于实际运行速度更快。

HotSpot 默认采用混合模式,综合了解释执行和即时编译两者的优点。它会先解释执行字节码,而后将其中反复执行的热点代码,以方法为单位进行即时编译。

2.2 加载流程

执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机的方法区中。实际运行时,执行引擎会执行方法区内的代码。每当调用一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且 Java 虚拟机不要求栈帧在内存空间里连续分布。当退出当前执行的方法时,不管是正常返回还是异常返回,JVM均会弹出当前栈帧,并将之舍弃。

3、加载Java类

=========

JVM加载 Java 类的过程可分为三大步骤:加载、链接以及初始化。

3.1 加载

指通过类加载器查找字节流,创建类的过程。类加载器使用双亲委派模型,即接收到加载请求时,会先将请求转发给父类加载器。

3.2 链接

指将创建成的类合并至 JVM中,使之能够执行的过程。

链接还分验证(验证被加载类是否满足 JVM约束)、准备(为被加载类静态字段分配内存)和解析(将被加载类中的符号引用解析成为实际引用)三个阶段。其中,JVM规范并不要求解析阶段一定要在链接步骤中完成。

3.3 初始化

为常量赋值,以及执行 方法的过程。类的初始化仅会被执行一次,这个特性被用来实现单例的延迟初始化。

4、垃圾回收

======

垃圾回收器采用可达性分析来探索所有存活的对象。它从一系列根对象出发,标记所有被引用的对象。为了防止在标记过程中堆栈的状态发生改变,JVM采取STW(Stop-The-World) 操作,暂停其他非垃圾回收线程。

通常来说,JVM采用分代回收的思想,将堆划分为新生代和老年代,并且在不同代中应用不同的垃圾回收算法。新生代再划分为 Eden 区和两个大小一致的 Survivor 区。在Minor GC 中,Eden 区和非空 Survivor 区的存活对象会被复制到空的 Survivor 区中,当 Survivor 区中的存活对象复制次数超过一定数值时,它将被晋升至老年代。因为 Minor GC 只针对新生代进行垃圾回收,所以需要考虑从老年代到新生代的引用。为了避免扫描整个老年代,Java 虚拟机引入了名为卡表的技术,标出老年代对新生代引用的内存区域。

G1 垃圾回收器包含三个阶段(新生代GC、并发标记周期、混合GC);G1将堆划分为多个等大的区域,优先收集垃圾最多的区域,从而最大化垃圾回收的效益。

Java 11 中引入的实验性垃圾回收器 ZGC,仅在扫描可达对象时请求 Stop-The-World,暂停应用线程。因此,它宣称可将 GC 暂停时间控制在 10ms 以下。ZGC 暂时没有应用分代回收的思路,将整个堆空间看成一块,其代价是垃圾回收 CPU 消耗较高。

5、Java内存模式

==========

在现代计算机系统中,代码通常不会按照书写顺序执行。造成这一情况的原因有三个,分别为编译器的重排序,处理器的乱序执行,以及内存系统的重排序。

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友,点击这里即可免费获取

三面蚂蚁金服成功拿到offer后,他说他累了

三面蚂蚁金服成功拿到offer后,他说他累了

三面蚂蚁金服成功拿到offer后,他说他累了

-Csyfo36g-1628578760435)]

[外链图片转存中…(img-b0ysvpN9-1628578760437)]

[外链图片转存中…(img-qvuCFZpL-1628578760438)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值