美文网首页
JVM在运行时的数据区划分

JVM在运行时的数据区划分

作者: 劝君莫听雨 | 来源:发表于2020-11-06 23:42 被阅读0次
1.JVM在运行时的数据区:

方法区,虚拟机栈, 本地方法栈
堆 程序计数器

2.程序计数器

每个线程都需要有自己的程序计数器,所以这类内存是属于线程私有的内存

3.java虚拟机栈

也是线程私有的,生命周期与线程相同 【栈帧 是方法运行时的基础数据结构】
描述的是java方法执行的内存模型:每个方法在执行的同时,都会创建一个"栈帧",用来存储局部变量表操作数栈,动态链接,方法出口等信息。每个方法从调用到执行完成的过程,就对应这一个栈帧在虚 拟机栈中入栈到出栈的过程。

在虚拟机规范中,对java虚拟机栈规定了两种异常情况:
①.如果先后才能请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。
②.在动态扩展虚拟机栈,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常

3.本地方法栈

只不过本地方法栈为虚拟机使用到的Native方法服务
而虚拟机栈是为虚拟机使用的java方法(字节码)服务

3.Java堆

Java堆是虚拟机所管理的内存中最大的一块。为线程共享,在虚拟机启动的时候创建。
唯一目的是:存放对象实例,
同时,java堆也是垃圾收集器管理的主要区域,也成为了GC堆
java堆可以处于武理上不连续的内存空间,但是要求逻辑上连续。
java堆的内存,也可设置成固定大小和可扩展,
若是在堆内存中没有完成实例分配,并且堆也没有在扩展是,会抛出OutOfMemoryError异常。

3.方法区

为线程共享,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
垃圾收集行为在这个区域较少出现,但并非进入该区域的数据就永久存在。
这个区域的回收目标主要是针对常量池的回收和对类型的卸载。但是对类型的卸载,条件相当苛刻。不过对该区域的回收确实是有必要的。

相关文章

网友评论

      本文标题:JVM在运行时的数据区划分

      本文链接:https://www.haomeiwen.com/subject/vzoxbktx.html