Java -----JVM运行时数据区

一、JVM体系结构

想要了解运行时数据区,先关注一下JVM的体系结构,知道数据区在JVM的整体位置和作用。

JVM

二、JVM运行时数据区

1.程序计数器

一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变该计数器的值来选择下一条需要执行的字节码指令,分支、跳转、循环等基础功能都要依赖它来实现。每条线程都有一个独立的的程序计数器,各线程间的计数器互不影响,因此该区域是线程私有的。

    当线程在执行一个Java方法时,该计数器记录的是正在执行的虚拟机字节码指令的地址,当线程在执行的是Native方法(调用本地操作系统方法)时,该计数器的值为空。另外,该内存区域是唯一一个在Java虚拟机规范中没有规定任何OOM(内存溢出:OutOfMemoryError)情况的区域。

2.Java虚拟机栈—JVM Stacks

JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,java虚拟机对Java栈的两种操作:以帧为单位的压栈和弹栈。

每当线程调用一个Java方法是,虚拟机都会在该线程的Java栈中亚茹一个新的栈帧。而这个栈帧存储着该方法的参数,局部变量,中间运算结果等等数据。

栈帧

由三部分组成:局部变量、操作数栈和帧数据区

局部变量:包含对应方法的参数和局部变量,局部变量区是以字长为单位存储数据的,并且是一个从0开始计数的数组空间,数据类型int 、float、对象的引用reference和returnAddress被存储在一个存储空间,而类型byte、short和char的值存入数组前都会被转换成int值。一次也是占据一个存储空间,long和double在数组中占据连续的两个存储空间。

方法1       方法一存储

可以看到在0的位置会存储一个隐含的变量this,用老表示调用该方法的对象本身。

类方法         类方法存储

而类方法并没有this,因为类方法只与类相关。而与具体的对象无关。

操作数栈

虚拟机在操作数栈中存储的是方法运算的操作数和运算结果,操作方式是压栈和出栈,数据的存储方式和上面说的局部变量存储方式是一样的。

Java虚拟机中国是没有寄存器的,这也是符合JVM平台无关特性的一点,虚拟机把操作数栈作为他的工作区,大多数指令都会从这里弹出数据,执行运算,然后再把结果压回操作数栈

帧数据区

Java栈帧还需要一些数据来支持常量池解析、正常方法返回以及异常派发机制,这些信息都被保存在Java栈帧的帧数据区中

 

3.本地方法栈(Native Method Stacks)

该区域与虚拟机栈所发挥的作用非常相似,只是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为使用到的本地操作系统(Native)方法服务。

4.Java堆(Java Heap)

它是JVM用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收。

5.方法区域(Method Area)

方法区在JVM中也是一个非常重要的区域,它与堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

  在Class文件中除了类的字段、方法、接口等描述信息外,还有一项信息是常量池,用来存储编译期间生成的字面量和符号引用。

 在方法区中有一个非常重要的部分就是运行时常量池,它是每一个类或接口的常量池的运行时表示形式,在类和接口被加载到JVM后,对应的运行时常量池就被创建出来。当然并非Class文件常量池中的内容才能进入运行时常量池,在运行期间也可将新的常量放入运行时常量池中,比如String的intern方法。

在JVM规范中,没有强制要求方法区必须实现垃圾回收。很多人习惯将方法区称为“永久代”,是因为HotSpot虚拟机以永久代来实现方法区,从而JVM的垃圾收集器可以像管理堆区一样管理这部分区域,从而不需要专门为这部分设计垃圾回收机制。不过自从JDK7之后,Hotspot虚拟机便将运行时常量池从永久代移除了。

总结:

内存区域

转载于:https://www.cnblogs.com/Actexpler-S/p/7668662.html

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

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

相关文章

20155235 《网络攻防》 实验八 Web基础

20155235 《网络攻防》 实验八 Web基础 实验内容 Web前端HTML(0.5分) 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。Web前端javascipt(0.5分) 理解JavaScript的基本功能,理解DOM。编写JavaScript验…

python每天1道面试题(3)--字符串组合

""" 题目3:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。解题思路: 先用列举法,举例出组合元素长度分别是1,2,..,len(str)时的具体元素, 然后发现当数…

【每周一图】蜂鸟

摄影/祈澈姑娘小花园偶遇的一只蜂鸟转载于:https://www.cnblogs.com/wangting888/p/9702088.html

API网关如何实现对服务下线实时感知

上篇文章《Eureka 缓存机制》介绍了Eureka的缓存机制,相信大家对Eureka 有了进一步的了解,本文将详细介绍API网关如何实现服务下线的实时感知。 一、前言 在基于云的微服务应用中,服务实例的网络位置都是动态分配的。而且由于自动伸缩、故障和…

TCP为什么要三次握手和四次挥手

http://www.jellythink.com/archives/705 简析TCP的三次握手与四次分手 https://zhuanlan.zhihu.com/p/24001696 计算机网络面试题 https://www.zhihu.com/question/36930631 TCP四次分手中,主动关闭方最后为什么要等待2MSL之后才关闭连接? http://ww…

Java处理文件BOM头的方式推荐

背景: java普通的文件读取方式对于bom是无法正常识别的。 使用普通的InputStreamReader,如果采用的编码正确,那么可以获得正确的字符,但bom仍然附带在结果中,很容易导致数据处理出错。另外,对于存在BOM头的…

封装svg组件

如何封装svg图标组件 封装svg图标组件的方法有很多种,如果只是单纯的想使用svg图标,可以将svg导出fonts字体图标使用,但这样做会失去svg原有的样式与尺寸,也可以当成img图片或者背景引入,但这样做非常繁琐。 最近项目中…

RabbitMQ 延迟队列,消息延迟推送

应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货。在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程…

windows Navicat Premium连接oracle

需要下载并指定Instant Client 下载地址:在oracle官网搜索Instant Client Downloads选择自己需要的客户端 //说明 //Navicat 版本 9 或以上捆绑了 instant client,但是捆绑的用不了,捆绑的10.2。因此下载高版本替换之 //版本有要求&#xff0…

关于arraylist的扩容机制

ArrayList会自动改变size的长度: 首先,ArrayList定义了一个私有的未被序列化的数组elementData,用来存储ArrayList的对象列表(注意只定义未初始):private transient Object[] elementData;   其次&am…

不同级别UI设计师的区别有哪些?

不同等级的UI设计师在工作内容以及基本的薪资待遇方面也是有区别的,很多在UI培训学校学习的小伙伴们并不知道各个等级的UI设计师工作内容有什么差别,那么合肥学码思小编就给大家总结一下这些区别分别表现在哪些方面。 一、初级UI设计师 初级UI设计师的主…

Linux命令行参数前加--,-和不加杠

参数前“-”的表明后面的参数是字符形式。参数前“--”的则表明后面的参数是单词形式。参数前有横的是System V风格。 参数前没有横的是BSD风格。 转载于:https://www.cnblogs.com/YYRise/p/9090476.html

反射笔记-----------------------------

1.反射基本概念: 01.定义: 反射是指在程序运行期间,能够观察和修改类或者类的对象的属性和行为的特性! 02.作用: 001.在运行期间获取类的修饰符,包名,类名,实现的接口,继…

kubernetes 集群部署

kubernetes 集群部署 环境JiaoJiao_Centos7-1(152.112) 192.168.152.112JiaoJiao_Centos7-2(152.113) 192.168.152.113JiaoJiao_Centos7-3(152.114) 192.168.152.114已开通 4C8G80G 集群规划 部署方式 环境准备:基于主机名称通信,时间同步,关…

PHP学习笔记--抽象类和抽象方法的应用

抽象类** 什么是抽象方法?** 定义:如果一个类中的方法,没有方法体的方法就是抽象方法(就是一个方法没有使用{}而直接使用分号结束)* * abstract function test(); //抽象方法* * function test(){ //有方法体…

wordpress 显示数学公式 (MathJax-LaTeX)

blog 不放一堆数学公式怎么能显得高大上,所以 MathJax-LaTeX 也是必装的插件之一了。 一、安装 MathJax-LaTex 插件 直接在 wordpress 插件中,搜索并安装 MathJax-LaTeX 二、安装本地 MathJax 服务 不过由默认的 MathJax cdn 服务经常被墙,所…

长春理工大学第十四届程序设计竞赛(重现赛)F.Successione di Fixoracci

链接:https://ac.nowcoder.com/acm/contest/912/F 题意: 动态规划(Dynamic programming,简称dp)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。例如,假设小x一步能爬1层或2层台阶,求小x爬n层台阶…

ConstraintLayout

ConstraintLayout使用笔记 具体使用参考:http://blog.csdn.net/guolin_blog/article/details/53122387 ConstraintLayout 好处还是很明显,确实可以减少嵌套。性能对比参阅:http://www.cnblogs.com/liujingg/p/7161319.html 简单嵌套Constrain…

css权重

权重大小 内嵌权重为1000 <p style"color: yellow;">ALEX</p> id选择器的权重为100&#xff0c;类选择器的权重为10&#xff0c;标签选择器的权重为1. /*1 1 1*/ #box1 .wrap2 p{color: red; }当权重一样的时候&#xff0c;是以后设置的属性为准&#xf…

手机两列布局,正方形

手机两列布局&#xff0c;正方形。 直接贴出调试网站的结果&#xff0c;阅读效果还不错。 转载于:https://www.cnblogs.com/blogzhang/p/11002428.html