java 虚拟机【一个demo 学习--jvm 运行时数据区(五)】

程序其实就是  数据 指令 控制

java 虚拟机【一个demo 学习--jvm 运行时数据区(五)】_第1张图片

 

一 程序计数器    当前线程正在执行字节码指令的地址(行号)

 

虚拟机栈  每一个方法是一个帧栈,存储当前线程运行方法时 用到的 数据 指令 和返回地址

方法中 有变量 --》 有存储变量的  局部变量表(this 变量 对象引用)

方法中 有计算 比如  两个变量求和、 计算的时候 需要地方存储 -->操作数栈

动态链接   一个接口 Service 有两个实现类 ServiceA ServiceB  当,service.do() ,调用方法的时候  service 调用方法的时候,需要service 动态链接去获取一个实例, 为何存到 service.do()  调用的时候才会别解析,

方法出口  就是返回地址

方法区  类信息  常量  静态变量  JIT

 

中间字节码可以确定大小

 

线程值执行单元  线程执行方法 需要 数据 指令 返回地址  存储一个地方

 

java 虚拟机【一个demo 学习--jvm 运行时数据区(五)】_第2张图片

 

 

 

javap -v  xxx.class 可以获取反编译文件

 

举例:  int j=0;

首先 将0 压栈, 就是将 0 存到 操作数栈中, 然后将 0 出栈,赋值到 局部变量表 j 中

 

xss 栈的深度  栈是有限的  超过会报错  StackOverFlowError

 

java 虚拟机【一个demo 学习--jvm 运行时数据区(五)】_第3张图片

 

jvm 内存模型 JMM

java 虚拟机【一个demo 学习--jvm 运行时数据区(五)】_第4张图片

 

复制回收算法, 一个对象  new 8M()  ,放入到 eden 区,后来 又来了 一个 new 1M 这时候,eden 已经存不下, 8M 就到老年代

 

java 虚拟机【一个demo 学习--jvm 运行时数据区(五)】_第5张图片

 

meta Space  是可以动态扩容的

 

 

你可能感兴趣的:(java 虚拟机【一个demo 学习--jvm 运行时数据区(五)】)