2 jvm内存模型
2022-07-31 11:13:41 0 举报
AI智能生成
jvm内存模型
作者其他创作
大纲/内容
jvm整体结构划分
类装载子系统
运行时数据区(内存模型)
堆(线程共享)
存放对象实例
-Xmx –Xms
划分
新生代
Eden
Survivor
老年代
虚拟机栈(线程私有)
线程执行方法的内存模型
一个线程一个虚拟机栈
每个方法一个栈帧
局部变量表
容量单位solt,一个solt存放32位以内的数据,solt可被重用(变量不在被引用)
以索引的方式使用该表,索引为0默认指向该方法的对象引用,可以用this调用它
存储方法参数和方法内部局部变量
局部变量少的函数可以支持更深层的调用,调用次数就越多
操作数栈
先进后出,最大深度:max_stacks,编译期间确认
存取中间结果,也会存返回值
字节码执行引擎的工作区
动态链接
运行时常量池中的符号引用替换成直接引用
方法出口
恢复上层方法的局部变量表和操作数栈,返回值(如果有)压入上层方法的操作数栈中
程序计数器的值指向下一个指令地址
不存在垃圾回收问题,线程结束就释放
2种异常
线程请求的栈深度大于虚拟机允许的深度,抛StackOverFlowError异常
若可动态扩展,无法申请到足够内存时,抛OutOfMemoryError异常,通过-Xss指定占空间,大小决定函数调用深度
本地方法栈(线程私有)
native
元空间(线程共享)
常量+静态变量+类元信息+运行时常量池
由堆上的对象头里_klass指针指向该对象的类结构信息
直接内存
程序计数器(线程私有)
字节码执行引擎
jvm整体结构和内存模型关系
jvm参数配置
堆参数
-Xmx
-Xms
-Xmn(新生代)
依据业务
虚拟机栈参数
-Xss
元空间参数
-XX:MetaspaceSize=
触发Fullgc的初始阈值,默认21
-XX:MaxMetaspaceSize=
0 条评论
下一页