扫码关注微信公众号

回复“面试手册”,获取本站PDF版

回复“简历”,获取高质量简历模板

回复“加群”,加入程序员交流群

回复“电子书”,获取程序员类电子书

当前位置: Java > JVM高频面试题 > 2.JVM运行时数据区

JVM运行时数据区主要由方法区、堆、虚拟机栈、本地方法栈、程序计数器组成,其中方法区和堆是线程共享数据区,虚拟机栈、本地方法栈、程序计数器是线程私有数据区,结构如下图。

JVM
JVM
  • 程序计数器:当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成,并且程序计数器是唯一一个不会出现 OutOfMemoryError 的内存区域,它的生命周期随着线程的创建而创建,随着线程的结束而死亡。
  • 虚拟机栈:虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至完成的过程中,都会对应着一个栈帧在虚拟机栈中入栈到出栈的过程
  • 本地方法栈:本地方法栈与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java 方法的,而本地方法栈是为虚拟机调用 Native 方法服务的,并且与虚拟机栈一样,也会抛出StackOverflowErrorOutOfMemoryError
  • 堆:Java 虚拟机中内存最大的一块,几乎所有的对象实例都在这里分配内存
  • 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

点击面试手册,获取本站面试手册PDF完整版