暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
全网最硬核 JVM 内存解析(上).pdf
123
86页
2次
2023-11-01
免费下载
个⼈创作公约:本⼈声明创作的所有⽂章皆为⾃⼰原创,如果有参考任何⽂章的地⽅,会标注出来,如
果有疏漏,欢迎⼤家批判。如果⼤家发现⽹上有抄袭本⽂章的,欢迎举报,并且积极向这个 github 仓
库 提交 issue,谢谢⽀持~
另外,本⽂为了避免抄袭,会在不影响阅读的情况下,在⽂章的随机位置放⼊对于抄袭和洗稿的⼈的
“亲切”的问候。如果是正常读者看到,笔者在这⾥说声对不起,。如果被抄袭狗或者洗稿狗看到了,希
望你能够好好反思,不要再抄袭了,谢谢。
今天⼜是⼲货满满的⼀天,这是全⽹最硬核 JVM 解析系列第四篇,往期精彩:
全⽹最硬核 TLAB 解析
全⽹最硬核 Java 随机数解析
全⽹最硬核 Java 新内存模型解析
本篇是关于 JVM 内存的详细分析。⽹上有很多关于 JVM 内存结构的分析以及图⽚,但是由于不是⼀
⼿的资料亦或是⼈云亦云导致有很错误,造成了很多误解;并且,这⾥可能最容易混淆的是⼀边是
JVM Specification 的定义,⼀边是 Hotspot JVM 的实际实现,有时候⼈们⼀些部分说的是 JVM
Specification,⼀部分说的是 Hotspot 实现,给⼈⼀种割裂感与误解。本篇主要从 Hotspot 实现出
发,以 Linux x86 环境为主,紧密贴合 JVM 源码并且辅以各种 JVM ⼯具验证帮助⼤家理解 JVM 内
存的结构。但是,本篇仅限于对于这些内存的⽤途,使⽤限制,相关参数的分析,有些地⽅可能⽐较深
⼊,有些地⽅可能需要结合本身⽤这块内存涉及的 JVM 模块去说,会放在另⼀系列⽂章详细描述。最
后,洗稿抄袭狗不得 house
本篇全篇⽬录(以及涉及的 JVM 参数):
1. 从 Native Memory Tracking 说起(全⽹最硬核 JVM 内存解析 - 1.从 Native Memory Tracking
说起开始)
1. 2. Native Memory Tracking 的开启
2. Native Memory Tracking 的使⽤(涉及 JVM 参数:NativeMemoryTracking)
3. Native Memory Tracking 的 summary 信息每部分含义
4. Native Memory Tracking 的 summary 信息的持续监控
5. 为何 Native Memory Tracking 中申请的内存分为 reserved 和 committed
3. JVM 内存申请与使⽤流程(全⽹最硬核 JVM 内存解析 - 2.JVM 内存申请与使⽤流程开始)
1. 4. Linux 下内存管理模型简述
2. JVM commit 的内存与实际占⽤内存的差异
1. 3. JVM commit 的内存与实际占⽤内存的差异
4. ⼤⻚分配 UseLargePages(全⽹最硬核 JVM 内存解析 - 3.⼤⻚分配 UseLargePages开始)
1. 5. Linux ⼤⻚分配⽅式 - Huge Translation Lookaside Buffer Page (hugetlbfs)
2. Linux ⼤⻚分配⽅式 - Transparent Huge Pages (THP)
3. JVM ⼤⻚分配相关参数与机制(涉及 JVM 参数:
UseLargePages,UseHugeTLBFS,UseSHM,UseTransparentHugePages,LargePageSizeI
nBytes)
5. Java 堆内存相关设计(全⽹最硬核 JVM 内存解析 - 4.Java 堆内存⼤⼩的确认开始)
1. 6. 通⽤初始化与扩展流程
2. 直接指定三个指标的⽅式(涉及 JVM 参数:
MaxHeapSize,MinHeapSize,InitialHeapSize,Xmx,Xms)
3. 不⼿动指定三个指标的情况下,这三个指标(MinHeapSize,MaxHeapSize,InitialHeapSize)是如
何计算的
4. 压缩对象指针相关机制(涉及 JVM 参数:UseCompressedOops)(全⽹最硬核 JVM 内存解
析 - 5.压缩对象指针相关机制开始)
1. 5. 压缩对象指针存在的意义(涉及 JVM 参数:ObjectAlignmentInBytes)
2. 压缩对象指针与压缩类指针的关系演进(涉及 JVM 参数:
UseCompressedOops,UseCompressedClassPointers)
3. 压缩对象指针的不同模式与寻址优化机制(涉及 JVM 参数:
ObjectAlignmentInBytes,HeapBaseMinAddress)
6. 为何预留第 0 ⻚,压缩对象指针 null 判断擦除的实现(涉及 JVM 参数:
HeapBaseMinAddress)
7. 结合压缩对象指针与前⾯提到的堆内存限制的初始化的关系(涉及 JVM 参数:
HeapBaseMinAddress,ObjectAlignmentInBytes,MinHeapSize,MaxHeapSize,InitialHeapSize
8. 使⽤ jol + jhsdb + JVM ⽇志查看压缩对象指针与 Java 堆验证我们前⾯的结论
1. 9. 验证 32-bit 压缩指针模式
2. 验证 Zero based 压缩指针模式
3. 验证 Non-zero disjoint 压缩指针模式
4. 验证 Non-zero based 压缩指针模式
10. 堆⼤⼩的动态伸缩(涉及 JVM 参数:
MinHeapFreeRatio,MaxHeapFreeRatio,MinHeapDeltaBytes)(全⽹最硬核 JVM 内存解析
- 6.其他 Java 堆内存相关的特殊机制开始)
11. 适⽤于⻓期运⾏并且尽量将所有可⽤内存被堆使⽤的 JVM 参数 AggressiveHeap
12. JVM 参数 AlwaysPreTouch 的作⽤
13. JVM 参数 UseContainerSupport - JVM 如何感知到容器内存限制
14. JVM 参数 SoftMaxHeapSize - ⽤于平滑迁移更耗内存的 GC 使⽤
7. JVM 元空间设计(全⽹最硬核 JVM 内存解析 - 7.元空间存储的元数据开始)
1. 8. 什么是元数据,为什么需要元数据
2. 什么时候⽤到元空间,元空间保存什么
1. 3. 什么时候⽤到元空间,以及释放时机
2. 元空间保存什么
4. 元空间的核⼼概念与设计(全⽹最硬核 JVM 内存解析 - 8.元空间的核⼼概念与设计开始)
1. 5. 元空间的整体配置以及相关参数(涉及 JVM 参数:
MetaspaceSize,MaxMetaspaceSize,MinMetaspaceExpansion,MaxMetaspaceExpansio
n,MaxMetaspaceFreeRatio,MinMetaspaceFreeRatio,UseCompressedClassPointers,Co
mpressedClassSpaceSize,CompressedClassSpaceBaseAddress,MetaspaceReclaimPo
licy)
2. 元空间上下⽂ MetaspaceContext
3. 虚拟内存空间节点列表 VirtualSpaceList
4. 虚拟内存空间节点 VirtualSpaceNode 与 CompressedClassSpaceSize
of 86
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜