不愧是阿里 p8 大佬!终于把 Java 虚拟机底层原理讲清楚了,请签收
概述
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 虚拟机底层原理知识笔记,只需要转发+关注,私信关键词【笔记】即可免费获取!!!
评论