Java虚拟机内存模型

临世驻年 2020-07-23 10:09:20
解释一下Java虚拟机内存模型
...全文
756 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SpiritPoss 2020-07-23
  • 打赏
  • 举报
回复
JVM虚拟机将内存数据分为:

程序计数器虚拟机栈本地方法栈Java堆方法区等部分。程序计数器用于存放下一条运行的指令;虚拟机栈和本地方法栈用于存放函数调用堆栈信息;Java堆用于存放Java程序运行时所需的对象等数据;方法区用于存放程序的类元数据信息。

1、程序计数器

每一个线程都必须有一个独立的程序计数器,用于记录下一条要运行的指令。各个线程之间的计数器互不影响,独立工作;是一块线程私有的内存空间。

如果当前程序正在执行一个Java方法,则程序计数器记录正在执行的Java字节码地址,如果当前线程正在执行一个Native方法,则程序计数器为空。

2、Java虚拟机栈

Java虚拟机栈也是线程的私有空间,它和Java线程在同一时间创建,它保存方法的局部变量、部分结果,并参与方法的调用和返回。

在Java虚拟机规范中,定义了两种异常与栈空间有关:StackOverflowError 和 OutOfMemoryError。

在 HotSpot 虚拟机中,可以使用 -Xss 参数(如:-Xss1M)来设置栈的大小。栈的大小直接决定了函数调用的可达深度。

虚拟机栈在运行时使用一种叫做栈帧的数据结构保存上下文数据。在栈帧中,存放了方法的局部变量表、操作数栈、动态连接方法和返回地址等信息。每一个方法的调用都伴随着栈帧的入栈操作。相应的,方法的返回则表示栈帧的出栈操作。

如果方法调用时,方法的参数和局部变量相对较多,那么栈帧中的局部变量表就会比较大,栈帧会膨胀以满足方法调用所需传递的信息。因此,单个方法调用所需的栈空间大小也会比较多。
bioittang 2020-07-23
  • 打赏
  • 举报
回复
直接搜应该有的吧

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧