JVM 运行时数据区域总结

引言

本博客总结自《深入理解 Java 虚拟机》,第二章。

一、概述

Java 虚拟机在执行 Java 程序的时候会把它所管理的内存划分为若干个不同的数据区域。

记忆口诀:两栈一计数,一堆一方法。

解释:第一句两栈分别是VM栈本地方法栈,一计数指的是程序计数器,它们都是线程私有;后一句,一堆指的是Java堆,一方法指的是方法区,这两个区域是线程共享

二、程序计数器

程序计数器是一个较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器

在虚拟机的概念模型(实现各有不同)中字节码解释器工作时就是通过改变程序计数器的值来选取下一条需要执行的字节码指令,这与程序的分支、循环、跳转、异常处理、线程恢复等基础功能紧密相关。

在这里,书中提到:

Java 虚拟机的多线程是通过线程轮流切换并分配一个 CPU 内核执行时间的方式来实现的,任何一个时间点,一个CPU 内核都只会执行一条线程中的指令。

正因为这样的线程实现策略,要想在线程切换后恢复到正确的执行位置,这个程序计数器必须是线程私有,独立存储。

程序计数器可以存储两种内容,字节码指令地址空值

当线程正在执行的是 Java 方法的时候,存储字节码指令地址,而当执行的是Native 方法的时候,则为空值。

另外,值得注意的是,此内存区域是 JVM 规范中唯一没有规定任何 OOM Error情况的区域。也就是说,如果你的程序突然报了 OutOfMemory Error 错误,那么肯定不是这个区域出了问题

三、JVM 栈

JVM 栈又称为 Java 虚拟机栈,或 VM 栈。

这块逻辑分区存储的方法调用信息。Java 方法在调用的时候,会在 JVM 栈中创建一个 栈帧(Stack Frame),它会用于存储方法内部所用到的局部变量表、操作数栈、动态链接、方法返回地址等信息。其中最需要程序开发人员关心的是存储局部变量的局部变量表。

方法开始执行,栈帧入栈,方法执行完毕,栈帧出栈,以此来实现线程中方法的调用

因此,从上面的特征来看, JVM 栈也一定是线程私有的生命周期与线程相同

局部变量表,存储编译期可知的基本数据类型变量(double、long 占 2 个 Slot 局部变量空间,其他 1 个)、对象引用、以及 returnType。

局部变量表的内存分配是在编译期间完成分配。当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小

一般情况下 JVM 栈不会轻易抛出异常,但是有一种情况经常会导致 StackOverflowError 异常,就是递归

递归是一种通过调用方法自身向“基准情况”不断推进的一种算法,但是基准情况的判断无法在编译期给出答案,这就导致了,如果无法在有限的栈深度给出问题的解,方法就会不停地调用自身,从而将 JVM 栈空间占满,那么就会导致 StackOverflowError 异常。但现代的大多数虚拟机都支持动态扩展这块内存区域,但如果连动态申请的内存依然无法满足计算需要,就会报 OutOfMemoryError 异常。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇博客读懂设计模式之---单例模式

一篇博客读懂设计模式之---单例模式 一。 单例模式 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处: 1、某些类创建比较频繁&…

计算机会计知识竞赛,全国企业会计信息化知识竞赛试题及答案

全国企业会计信息化知识竞赛试题及答案第 1 题(单选)下列各项中,符合会计软件不可逆的记账功能要求的是( A )A.记账标记不得通过任何操作予以取消B.不可以用红字凭证更正记账错误C.可以删除已经记账的记账凭证D.可以进行反记账第 2 题(单选)下列关于信息系统自动生成…

使用缓冲字节流:BufferedInputStream与BufferedOutputStream读写数据

功能逻辑:将一个视频文件通过缓冲字节输入流进行读取,然后再通过缓冲字节输出流将其重新拷贝输出。public static void main(String[] args) {try {FileInputStream fis new FileInputStream("Rick_and_Morty.mkv");//第二个参数指定了缓冲区…

多媒体计算机技术的主要特点,多媒体技术主要特点?

满意答案01and032013.11.24采纳率:41% 等级:11已帮助:5479人多媒体技术有以下几个主要特点:(1)集成性 能够对信息进行多通道统一获取、存储、组织与合成。(2)控制性 多媒体技术是以计算机为中心,综合处理和控制多媒…

java io流的学习总结~~

java io流的学习总结~~流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据…

计算机组成原理第二章数据,计算机组成原理第二章数据在计算机中的表示

计算机组成原理第二章数据在计算机中的表示 (91页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!14.90 积分第二章 数据在计算机中的表示 n 概述 n 字符编码 n 中文编码 n 逻辑数据 n 数值数据 n 校验…

史上最全的ubuntu服务器搭建环境教程~~~

ubuntu服务器搭建环境~~~ 1. 先安装xshell:远程服务器连接(取代直接在浏览器 上 访问) 2. 安装xftp(ftp文件传输)直接双击红色圈圈即可3. 安装mysql数据库:指令:sudo apt-get updatesudo apt-ge…

Apache工具包方法——Hex.encodeHexString(byte[] data)源码浅析

【2019-07-02 注:标题是Hex.encodeHexString(byte[] data) 的源码解析,但在实际测试过程中,改了方法名称,内部实现还是完全一样的。】 最近正在研究加密的相关方法和思想,有时候会用到byte类型的数组密钥或者密文&…

计算机考试400,400作文:电脑考试

400作文:电脑考试今天下午第三节课是大家最爱的电脑课,第三节课的上课铃还没敲响,大家就早早来到电脑室门口,拍好整齐的队伍,等待电脑金老师来带领我们进电脑室。终于,金老师面带微笑从办公室走到了我们这边…

史上最容易理解的暴力递归和动态规划~~

史上最容易理解的暴力递归和动态规划~~介绍递归和动态规划暴力递归:1, 把问题转化为规模缩小了的同类问题的子问题2, 有明确的不需要继续进行递归的条件(base case)3, 有当得到了子问题的结果之后的决策过程 4, 不记录…

英雄联盟与人生奋斗的类比讨论

自从去年毕业之后就已经很少玩英雄联盟了,最近半年更是一次都没碰过这个游戏了。 更新还是异常的频繁,打斗还是异常的激烈,比赛还是异常的水(S系列中国队的表现)。 我今天并不是想追忆曾经的激情,而是想把…

如何最好手机硬件测试软件,手机硬件出现故障?简单几部教你自己动手检测! _手机资讯...

很多人在使用手机时,经常遇到例如屏幕触摸不准、距离感应器不反应、手机按键失灵等类似问题,有的情况是系统故障,但大多数是属于硬件故障,那如何判定呢?其实很多安卓手机自带的有硬件检测工具,下面就以小米…

qq传输文件的软件测试点,超强新功能 QQ传文件夹测试版抢先试用

QQ传文件夹测试版试用(1)中关村在线软件事业部消息 腾讯体验中心今日(7月29日)发布了一个新的体验项目“QQ2009传文件夹测试版”。QQ的传文件功能,相信多数用户都使用过。在之前的版本中,很多用户反馈希望增加传文件夹的功能,方便多文件的传输…

黑色玫瑰服务器延迟高,LOL:含金量最高的服务器,黑色玫瑰垫底,最后一个钻石起步!...

原标题:LOL:含金量最高的服务器,黑色玫瑰垫底,最后一个钻石起步!黑色玫瑰。它是英雄联盟中非常特别的一个大区。这个大区是中间位置,电十,却是比电二高手还要多的地方。因为这个大区小姐姐特别的…

Java网络编程————UDP实现ThinkPad S5网络唤醒

功能要求:通过Java程序实现ThinkPad S5 笔记本网络唤醒 必备知识: 一、定义:网络唤醒,通过局域网、互联网或通讯网络,以有线网卡的形式,向目标电脑发送魔法包(Magic Packet),让电脑自动开机。…

奥特曼系列ol服务器名称带怪兽,《奥特曼系列ol》怪兽图鉴 怪兽阵容

《奥特曼系列ol》这款游戏中的怪兽图鉴也是很多玩家非常关注的问题之一哦,随着游戏的不断的更新,游戏也是加入了不少全新的玩法,一定让很多玩家觉得有些迷惑吧。下面小编为大家带来《奥特曼系列ol》怪兽图鉴以及怪兽阵容,希望大家…

继上一篇博客--javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)

通过动态分配地址来提升javaweb文件下载接口的其兼容性和可扩展性: (上篇博文地址:https://blog.csdn.net/weixin_37766296/article/details/80044000)log4j.properties 文件: log4j.rootLogger debug,stdout,D,Elog4…

服务器主机启动不显示,服务器主机不启动怎么回事

服务器主机不启动怎么回事 内容精选换一换本文介绍了主机迁移服务SMS各特性版本的功能发布和对应的文档动态,新特性将在各个区域(Region)陆续发布,欢迎体验。源端服务器数据收集声明。源端服务器上安装和配置完迁移Agent后,迁移Agent会把源端…

最简明扼要的 Systemd 教程,只需十分钟

systemctl常用命令介绍~~~Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。 Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。启动及服务大多数主流发行版要…

Java常用设计模式————抽象工厂模式

简介 每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。 与工厂方法模式的区别 工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构,因此抽象工厂模式在结构上要比工厂方法模式更加复杂和抽象,也更…