我们都知道,JVM的垃圾收集机制能够帮开发者自动管理内存,了解JVM运行时的内存结构是理解垃圾收集机制的前提。本文主要简单介绍JVM运行时的内存结构。

【JVM运行时内存中不同的数据区域】

一、PC寄存器

做过嵌入式开发或者底层编程的朋友应该都知道PC寄存器的作用,它就相当于在程序流中的游标,指示线程当前的运行位置。但是要注意,如果虚拟机执行的是本地native方法,则PC寄存器为undefined状态。

一个线程持有一个独立的PC寄存器。

二、java栈

每一个JVM线程都会拥有一个java栈,java栈伴随着线程的创建而创建。java栈中存放着多个java帧,至于什么是java帧会在文章后面介绍。

三、java堆

JVM所有线程之间共享,存放类实例和数组对象。

四、方法区

JVM所有线程之间共享,存放编译代码。

五、运行时常量池

JVM所有线程之间共享,存放在方法区中,对应于class文件中每一个类或者接口的常量池表。

六、本地方方法栈

一个线程拥有一个,在native方法执行时使用。

【栈帧介绍】

线程中的每个方法被调用的时候JVM都会生成一个栈帧,栈帧存放在线程的java栈中。栈帧主要保存一下几种内存类型。

一、局部变量表

一个变量列表。变量的类型是原生类型或者引用类型。这里面存放都是局部变量,比如说方法的参数和方法内部定义的变量。一个java程序在编译成class文件的时候局部变量表的最大容量就已经被确定了。

二、操作数栈

存放操作数,如相加指令中的两个加数和结果。

三、动态链接

要理解动态了解首先要了解JVM对方法的调用过程。JVM的运行时常量池保存了大量的符号引用,有些符号引用可以看成是方法的间接引用。JVM在需要调用某个方法时需要将符号引用(也就是方法的间接引用)转变成方法在内存中的直接引用。如果JVM是在类加载或者引用符号第一次使用的时候将引用符号转变成方法的直接引用,这种转换叫静态链接;如果JVM是在运行期间将引用符转变成方法的直接引用,则这种转变叫做动态链接。

简单来说,栈帧中的动态链接就是帮助JVM在执行某个方法是调用其他方法。

四、方法的返回

JVM的方法返回分为两种情况,一种是正常结束返回,另外一种是异常结束返回。正常结束返回时,方法会把返回值交给方法的调用者;异常结束时,方法不会有返回值,而是让调用者处理异常。

转载于:https://www.cnblogs.com/chenshi/p/4108069.html

JVM运行时的内存结构相关推荐

  1. 利用jmap和MAT等工具查看JVM运行时堆内存

    2019独角兽企业重金招聘Python工程师标准>>> jmap JDK自带了一些工具可以帮助我们查看JVM运行的堆内存情况,常用的是jmap命令 如果想学习Java工程化.高性能及 ...

  2. 了解JVM运行时的内存分配

    前言 上文中,在介绍运行时数据区域中的 JAVA 堆时,提到了 JVM 中的堆,一般分为三大部分:新生代.老年代.永久代,本文将进一步了解运行时的内存分配情况. 正文 1.新生代 主要用来存放新生(n ...

  3. java jmap mat_利用jmap和MAT等工具查看JVM运行时堆内存

    jmap JDK自带了一些工具可以帮助我们查看JVM运行的堆内存情况,常用的是jmap命令 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析 ...

  4. 图解带你掌握`JVM`运行时核心内存区

    摘要:堆空间差不多是最大的内存空间,也是运行时数据区最重要的内存空间.堆可以处于物理上不连续的内存空间,但在逻辑上它应该被视为连续的. 本文分享自华为云社区<醒酒菜:动画图解核心内存区--堆&g ...

  5. JVM(运行时数据区结构)详解一

    JVM(Java虚拟机) JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功 ...

  6. JVM -- 运行时栈帧结构简介

    栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法的局部变量表,操作 ...

  7. JVM运行时栈帧结构

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_36367789/article/details/81711223 栈帧(Stack Frame ...

  8. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义...

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  9. JVM运行时结构、Java内存管理、JVM实例、HotSpot VM对象的创建、内存布局和访问定位

    1.JVM运行时结构 Java 运行时数据区域有程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区.其中前三个线程私有,随线程生而生,线程灭而灭:后面两个是线程间共享. 1.1 程序计数器 ...

最新文章

  1. 51nod 1287: 加农炮 好题啊好题
  2. Sublime Text 2.0.1 版本 Build 2217 汉化包
  3. android电话系统,Android电话系统之-rild.doc
  4. python网站有中文界面吗_手把手教你用python开发界面程序
  5. mysql 数据库乱码_Mysql数据库乱码问题的对应方式
  6. 用友ERP-U8执行完成流程小记
  7. Apache No installed service named “Apache2.4“的解决办法
  8. 手把手教你申请Coursera的课程助学金
  9. 《数据挖掘概念与技术》学习笔记
  10. python面向对象实例王者荣耀_python王者荣耀
  11. vb文件服务器例程,利用VB进行服务器编程实例汇总.docx
  12. 我的世界java版种子掠夺者,《我的世界》:手机版中那些神级种子,各式地形一应俱全...
  13. 50 链表排序(Sort List)
  14. 解决win10中无法打开CHM文件的方法
  15. MySQL查询某一天数据
  16. 木马是如何穿过防火墙的
  17. SpringBoot基础学习之SpringBoot配置(上篇)
  18. 最完整VC++6.0安装教程、windows命令行cl编译命令配置、cl编译命令使用、以及整套安装所需的附件
  19. iPhone越狱后推荐插件
  20. 作业帮智能硬件产品发布会:喵喵机电子单词卡上市

热门文章

  1. 多级队列调度算法可视化界面_多级反馈队列调度算法
  2. java修改cookie的值_Java管理Cookie增删改查操作。
  3. 使用minio搭建文件服务器,MinIO文件服务器构建
  4. php跳转方式带rere_PHP利用REFERER根居访问来地址进行页面跳转
  5. 云丁智能锁使用说明书_出门不再带钥匙 云丁D2F智能指纹锁新体验
  6. 测试音频质量的软件,音频质量PESQ得分评估原理与步骤
  7. c语言语句的机器级表示实训,深入理解计算机系统(笔记):程序的机器级表示...
  8. R语言之随机数与抽样模拟篇
  9. android单元测试android环境,基于Robolectric的Android单元测试 —环境搭建与部署运行...
  10. 系统学习深度学习(三十八)--深度确定性策略梯度(DDPG)