不愧是阿里p8,终于把Java 虚拟机底层原理讲清楚了,请签收

概述

JVM 的内存模型和 JVM 的垃圾回收机制一直是 Java 业内从业者绕不开的话题(实际调优、面试)JVM是java中很重要的一块知识,也是面试常问的问题之一,直至今天,仍然还有许多面试者在被问到Java虚拟机相关问题时,还是一脸懵逼,面试完之后直接被虐哭。今天特分享阿里架构师整理的Java虚拟机底层原理,请签收!

清单

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

由于文章篇幅限制,为了避免影响阅读体验,以下内容已截图展示,需要完整超清版本的仅需添加小助理vx:XIaonan00000621即可获取免费下载方式!

JVM 内存结构

Java 虚拟机的内存空间分为 5 个部分:

  • 程序计数器
  • Java 虚拟机栈
  • 本地方法栈
  • 方法区

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

HotSpot 虚拟机对象探秘

在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域:

  • 对象头(Header)
  • 实例数据(Instance Data)
  • 对齐填充(Padding)

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

垃圾收集策略与算法

程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。

而对于 Java 堆和方法区,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的正是这部分内存。

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

HotSpot 垃圾收集器

HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

内存分配与回收策略

对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定,取决于当前使用的垃圾收集器组合以及相关的参数配置。

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

JVM 性能调优

在高性能硬件上部署程序,目前主要有两种方式:

  • 通过 64 位 JDK 来使用大内存;
  • 使用若干个 32 位虚拟机建立逻辑集群来利用硬件资源。

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

类文件结构

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

类加载的时机

类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下

7 个阶段:

  • 加载
  • 验证
  • 准备
  • 解析
  • 初始化
  • 使用
  • 卸载

验证、准备、解析 3 个阶段统称为连接。

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

类加载的过程

类加载过程包括 5 个阶段:加载、验证、准备、解析和初始化。

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

类加载器

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

如果需要获取上述Java 虚拟机底层原理知识笔记仅需添加小助理vx:XIaonan00000621即可获取免费下载方式!

猜你喜欢

转载自blog.csdn.net/ygk004/article/details/121576867