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 消耗较高。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
针对以上面试题,小编已经把面试题+答案整理好了
面试专题
除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
L、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**