JVM(更新中)

本文基于 JDK 8 HotSpot VM 撰写

1) Java 概述

1.1) JAVA 版本历史

图来转自 WikiPedia(https://zh.wikipedia.org/wiki/Java版本歷史)
2020-11-29-17.43.00.png

1.2) JVM LTS Version / GC 选型

  • JDK 8: 默认使用 Parallel Scavenge + Parallel Old, 配置充裕建议使用 G1
  • JDK 11: 默认使用 G1, 配置充裕建议使用 ZGC
  • JDK 17: 未发布

1.2) 主流开源 JVM 选型

-JVM-94c1cea74f36f661.png

2) JVM 结构

我们先来看看整体的结构:
JVM-2.jpg

2.1) 虚拟机栈

JVM_Stack-2.jpg

2.2) 方法区

方法区的存储结构比较复杂, 一部分在堆中, 一部分在元空间中
MethodArea-2.jpg

2.3)

JVM_Heap-2.jpg

堆中的 Young Gen / Old Gen 存于 JVM 虚拟内存中, Metspace 直接使用 本地内存(默认无限扩容).

2.3.1) 堆默认分配大小

  • 初始堆大小: 物理内存的 1 / 64
  • 最大堆大小: 物理内存的 1 / 4, 最大为 1G

2.3.2) 垃圾回收过程