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 校验…

linux 指令学习总结~~~

linux 指令学习总结~~~目录操作:mkdir $HOME/testFolder(创建一个目录) cd ./testFolder(cd $HOME/testFolder)(切换目录) cd ..(切换到上级目录) mv $HOME/testFolder /var/tmp/(移…

Java移位运算

博客理由:景区APP项目中涉及到分布式ID设计。分别有几种ID的设计方式:一种是数据库的自增,但是局限很大;第二种uuid,直接采用jdk自带的uuid生成即可;第三种是Twitter的Snowflake(雪花)ID生成技术&#xff0…

计算机的外部设备 硬盘,外部设备采用SMB协议想共享电脑硬盘下的文件

您好!很抱歉这么晚回复您,请您尝试以下的步骤:1、右键点击”此电脑“,选择“管理”,展开“本地用户和组”,右键点击“Guest”,设置密码为空密码;取消帐户已禁用,点选“用…

史上最全的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类型的数组密钥或者密文&…

Spring Boot————简介与Spring时代的承接

引言 最近,公司正在开发一个景区系统的项目,涉及到Spring Boot框架的使用,在此记录下Spring Boot框架应该知道的基础知识。 一、产生 SpringBoot是顺应现在微服务(MicroServices)理念而产生的一个微框架&#xff08…

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

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

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

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

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

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

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

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

String StringBuilder StringBuffer三者之间的区别~~~

String StringBuilder StringBuffer三者之间的区别~~~String是字符串常量,它是典型的immutable类,被声明final class,所有的属性都是final,由于它的不变性,类似拼接,剪裁字符串等操作,都会产生…

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

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

String String.valueof() toString三者之间的区别~

String String.valueof() toString三者之间的区别~(String )强制类型转换,使用这种方法时,需要注意的是类型必须能转成String类型。因此最好用instanceof做个类型检查,以判断是否可以转换。否则容易抛出CalssCastExc…

SpringBoot学习——@Autowired自动注入报:could not be found问题的理解和解决方案

微服务应用程序中,我们会通过Java后台的方式发送http请求并调用其他注册在Spring Cloud Eureka server上的微服务,之前我们可能会手动封装一个Http发送请求类,然后通过其中的sendGet或者sendPost方法借由java IO的形式发送出去。 但是&#…