jvm内存模型
2020-02-06 16:03:59 2 举报
jvm运行时内存
作者其他创作
大纲/内容
访问对象
方法区Method AreainstanceKlass
FULL GC(--XX:PrintGCDetails)
执行引擎
本地库接口
Xxx.java
本地方法库
Eden(8/10)比例通过 -XX:SurvivorRatio=8标识e:s 8:1
线程3
所有线程共享数据区
栈帧
方法出口
类加载子系统
堆Heap
From(1/10)
对象
老年代(2/3)
Class File
分配空间
对象头
类加载过程
线程1
线程独享栈区
堆HeapinstanceOop
_metadata 结构体指向
javap -v Xxx.txt
初始化阶段 是对类中 static 修饰的代码的执行操作
STW
线程4
虚拟机栈VM STACK
分配堆空间
1:句柄2:直接指针访问
方法区Method Area
准备阶段 是对类(static)变量的 “零”赋值
局部变量表
1:对象自身的运行数据(Mark Word)HashCodeGC分代年龄锁状态标识线程持有锁偏向线程ID偏向时间戳
类元数据指针
线程隔离数据区
oop-klass模型
程序计数器Program Counter Register
Survivor(堆内存垃圾收集策略使用 复制算法)
ClassLoader Sub System
javac 编译
Class加载 解析 初始化
垃圾回收器
klass
线程2
对象引用:1:强引用 Objct A=Object B2:软引用:SoftReference3:弱引用:WeakReference4:虚引用:PlantomReference
老年代垃圾收集算法:1:标记--清理2:标记--整理
动态链接方法
minor GC(当eden区内存满的时候会进行GC)
空闲列表
-Xmn10M定义新生代大小-Xms20m 最小-Xmx20m 最大
Xxx.txt
本地方法栈Native Method Stack
...
InstanceOop是oopDesc的子类
GC Roots进行对象可达性分析(栈帧中本地变量表引用 方法区中静态属性引用 方法区常量引用 本地方法栈中JNI引用 的对象)
优化的目的就是减少full GC次数
To(1/10)
年轻代
操作数栈
内存回收和回收策略1:对象有限再Eden分配2:大对象会直接进入老年代 -XX:PretenureSizeThreshold=4m3:长期存活的对象进入老年代(默认15岁)-XX:MaxTenuringThreshold=154:动态对象年龄判断 再S空间中相同年龄所有对象大写综合大于S空间的一半,年龄大于或者等于该年龄的直接进入老年代5:空间担保 -XX:-HandlePromotionFailure=true
对其填充
FILO (first in last out)
Garbage Collection
Xxx.class
线程中方法对应的栈帧
NotePad++编写的.java文件
oop
指针碰撞
JNI
java 运行
实例数据
Java内存部分
Native Libary
对象finalize()只会执行一次放到F_QUEUE队列中等待执行,可以再此方法进行一次自救 this==
0 条评论
下一页