JVM学习
2019-08-01 14:21:28 2 举报
JAVA虚拟机笔记
作者其他创作
大纲/内容
附加信息
1.该区域的目的就是存放对象的实例2.可以是物理上不连续但逻辑上连续的内存空间。3.当堆中没有内存空间完成实例分配且堆无法扩展时,会报OutOfMemoryErroryi异常。
1.Java虚拟机栈描述的是Java执行的内存模型:每个方法执行时都会产生栈帧(stacks frame)。每一个方法执行过程对应着栈帧入栈到出站的过程。2.该区域会出现两种异常:如果线程请求的栈帧深度大于虚拟机所允许的最大深度, 则会报StackOverFlowError异常;如果虚拟机栈空间无法扩展空间不足时,会抛出OutOfMemoryError异常。
程序计数器
本地方法栈
即时编译器编译后代码
栈帧之间应该是完全独立的。但是虚拟机进行了一些优化:为了避免过多的 方法间参数的复制传递、方法返回值的复制传递等一些操作,就让一部分数据进行栈帧间共享。
线程共享
堆(heap)
1.Java虚拟机提供指令来让操作数栈对一些数据进行入栈操作2.同事用指令支持出栈操作3.想其他方法传参的参数也存在这里4.其他犯法返回的结果存在这里
JVM运行时数据区
栈帧(stack frame)
静态变量
栈帧
操作数栈
堆
动态链接
线程私有
Java类信息
方法区
方法区(method area)
1.与Java虚拟机栈作用类似,本地方法栈为虚拟机使用到的native方法服务。2.与Java虚拟机栈一样, 该区域也存在两种异常StackOverFlowError 和 OutOfMemoryError
jvm虚拟机栈
1.该区域可以是物理上不连续的内存空间,可以选择固定大小。可以选择不实现垃圾回收。这个区域垃圾回收主要针对常量池和对类型。2.该区域会报 outOfMenoryError异常。3.该区域垃圾回收需满足三个条件: 类对象对应的实例对象全部回收;类对象没有在任何地方被引用;类加载器被回收后
程序计数器(program counter register)
1.一块较小的内存空间,他的作用是记录当前线程执行的字节码指令的地址2.为什么要程序计数器:因为Java虚拟机支持多线程操作,但是在一个确定的时间点,CPU只能执行一条线程中的命令,因为为了使线程切换时保证恢复到正确的执行位置,每条线程都有自己独立的程序计数器, 独立存储,互不影响3.如果执行Native方法, 计数器值为null4.该区域是唯一不存在OutOfMemoryError异常的区域
常量
方法出口
局部变量表
JVM虚拟机栈
0 条评论
下一页