JDK包含开发工具和运行环境,JRE为运行环境
JVM
类装载系统
-
运行时数据区
堆:对象实例线程共享
1/3(8Eden => 1Survivor S0from- 1Survivor S1to年轻代) =>2/3老年代
Eden 满了执行 minor gc(gc root可达性分析算法找到存在引用对象复制到Survivor(两个区域轮换存放)且对象分代年龄+1,垃圾对象执行GC删除),1当触发gc时分代年龄达到15时,会将对象移动到老年代,老年代2/3 FULLGC,FULLGC触发会执行STW(stop the world,让其他线程停止,资源去处理GC,防止收集过程标记清除等复杂场景出现),2当一批对象大小超过survivor区域50%时,直接放到老年代栈(线程):为方法提供内存空间,存放局部变量表(对象为内存地址),操作数栈(操作的执行与临时存储操作相关数据),动态链接,方法出口(方法执行完的上层方法线程位置记录)
线程独享
可查看java字节码文件观察存储流程,javap -c XXX.class > XX.txt
本地方法栈:执行native方法所需分配的内存位置
线程独享
方法区:存放常量,静态变量,类信息1.8之后叫元空间,之前叫持久代
线程共享
程序计数器:各线程执行到代码的位置(时间片切换,断点执行,由字节码执行引擎动态修改) 字节码执行引擎
- 调优工具
调优目的:减少GC次数,减少GC过程STW时间,STW会影响用户体验
对象估算: 所有成员变量字节量和
xms xmx
xmn 年轻代大小
jvisualvm
jprofiler