JVM内存模型
内存区域划分
flowchart TD
JVM内存[JVM内存]
JVM内存 --> 方法区[方法区(Method Area)]
JVM内存 --> 堆[堆(Heap)]
JVM内存 --> 虚拟机栈[虚拟机栈(VM Stack)]
JVM内存 --> 本地方法栈[本地方法栈(Native Stack)]
JVM内存 --> 程序计数器[程序计数器(PC Register)]
各区域说明
区域 |
作用 |
配置参数 |
方法区 |
存储类信息、常量、静态变量 |
-XX:MetaspaceSize |
堆 |
对象实例分配区域 |
-Xms/-Xmx |
虚拟机栈 |
方法执行内存模型 |
-Xss |
本地方法栈 |
Native方法执行 |
|
程序计数器 |
线程执行位置记录 |
|
垃圾回收算法
- 标记-清除:产生内存碎片
- 复制算法:适合新生代,空间利用率50%
- 标记-整理:适合老年代,避免碎片
- 分代收集:新生代(复制)+老年代(标记整理)
类加载过程
加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载
常用调优参数
# 堆内存
-Xms512m -Xmx1024m
# 新生代
-XX:NewRatio=2
-XX:SurvivorRatio=8
# GC日志
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
监控工具
- jps:查看Java进程
- jstat:监控GC情况
- jmap:堆内存分析
- jstack:线程栈分析
- VisualVM:图形化工具