写点什么

JVM 运行时数据区域

用户头像
W🌥
关注
发布于: 2021 年 08 月 13 日


程序计数器

  • 字节码解释器通过改变程序计数器的值来依次读取指令,从而实现代码的流程控制,分支、循环、跳转、异常处理等基础功能都依赖这个计数器完成。

  • 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能恢复到正确的执行位置(能够知道该线程上次运行到哪儿了)【这也是为什么程序计数器需要每个线程独立拥有一个】。

注:程序计数器是唯一一个不会出现 OutOfMemoryError 的内存区域,它的生命周期随着线程的创建而创建,随着线程的结束而死亡。


Java 虚拟机栈

什么是虚拟机栈:描述 Java 方法执行的内存模型。Java 虚拟机栈是由一个个栈帧组成,而每个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法出口信息。每个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。


<扩展>

  • 关于异常:

Java 虚拟机栈会出现两种错误:StackOverFlowError 和 OutOfMemoryError。

StackOverFlowError: 若 Java 虚拟机栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前 Java 虚拟机栈允许的最大深度的时候,就抛出 StackOverFlowError 错误。

OutOfMemoryError: 若 Java 虚拟机堆中没有空闲内存,并且垃圾回收器也无法提供更多内存的话。就会抛出 OutOfMemoryError 错误。

  • 方法 / 函数如何被调用?

Java 栈可用类比数据结构中栈,Java 栈中保存的主要内容是栈帧,每一次函数调用都会有一个对应的栈帧被压入 Java 栈,每一个函数调用结束后,都会有一个栈帧被弹出。

Java 方法有两种返回方式:

1.    return 语句。

2.    抛出异常。

不管哪种返回方式都会导致栈帧被弹出。


本地方法栈

本地方法栈和虚拟机栈的关系?

和虚拟机栈所发挥的作用非常相似,区别是: 虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法(本地方法)服务。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。

可能出现的异常?

同 Java 虚拟机栈

 

所属:Java 堆是被所有线程共享的一块内存区域

目的 / 作用:存放对象实例,“几乎”所有的对象实例和数组都在这里分配内存。

 

发布于: 2021 年 08 月 13 日阅读数: 10
用户头像

W🌥

关注

还未添加个人签名 2021.08.04 加入

还未添加个人简介

评论

发布
暂无评论
JVM运行时数据区域