JVM(更新中)
本文基于 JDK 8 HotSpot VM 撰写
1) Java 概述
1.1) JAVA 版本历史
图来转自 WikiPedia(https://zh.wikipedia.org/wiki/Java版本歷史)
1.2) JVM LTS Version / GC 选型
- JDK 8: 默认使用 Parallel Scavenge + Parallel Old, 配置充裕建议使用 G1
- JDK 11: 默认使用 G1, 配置充裕建议使用 ZGC
- JDK 17: 未发布
1.2) 主流开源 JVM 选型
2) JVM 结构
我们先来看看整体的结构:
2.1) 虚拟机栈
2.2) 方法区
方法区的存储结构比较复杂, 一部分在堆中, 一部分在元空间中
2.3) 堆
堆中的 Young Gen / Old Gen 存于 JVM 虚拟内存中, Metspace 直接使用 本地内存(默认无限扩容).
2.3.1) 堆默认分配大小
- 初始堆大小: 物理内存的 1 / 64
- 最大堆大小: 物理内存的 1 / 4, 最大为 1G