写点什么

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

  • 2021 年 11 月 27 日
  • 本文字数:959 字

    阅读完需:约 3 分钟

概述

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

清单


由于文章篇幅限制,为了避免影响阅读体验,以下内容已截图展示,需要完整超清版本的可以在文末获取!!!

JVM 内存结构

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

  • 程序计数器

  • Java 虚拟机栈

  • 本地方法栈

  • 方法区



HotSpot 虚拟机对象探秘

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

  • 对象头(Header)

  • 实例数据(Instance Data)

  • 对齐填充(Padding)


垃圾收集策略与算法

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

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



HotSpot 垃圾收集器

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


内存分配与回收策略

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


JVM 性能调优

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

  • 通过 64 位 JDK 来使用大内存;

  • 使用若干个 32 位虚拟机建立逻辑集群来利用硬件资源。


类文件结构



类加载的时机

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

7 个阶段:

  • 加载

  • 验证

  • 准备

  • 解析

  • 初始化

  • 使用

  • 卸载

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


类加载的过程

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


类加载器


如果需要获取上述 Java 虚拟机底层原理知识笔记,只需要转发+关注,私信关键词【笔记】即可免费获取!!!

用户头像

还未添加个人签名 2021.10.14 加入

还未添加个人简介

评论

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