JVM内部结构

只要一个线程在运行,JVM就会在栈中开辟一个空间。

栈帧:当线程中有方法在运行时,栈就会开辟一片内存空间,存放相关信息,这片区域就是栈帧。 例如运行main方法。栈帧时遵循先进后出原则(FILO)。

栈帧内部结构:局部变量表、操作数栈、动态链接、方法出口

局部变量表:

定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddress类型。

由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安全问题。

局部变量表所需容量大小是在编译期确定下来的,并保存在方法的Code属性的maxumum local variables数据项中。在方法运行期间是不会改变局部变量表的大小的。

局部变量表中的变量只在当前方法调用中有效。在方法执行时,虚拟机通过使用局部变量表完成参数值到参数变量列表的传递过程。当方法调用结束后,随着方法栈帧的销毁,局部变量表也会随之销毁。

操作数栈:

局部变量表和操作数栈的关系:(以int a =1为例)

JVM会先将常量1赋值到操作数栈中,然后在局部变量表中定义一个变量a,最后将常量1从操作数栈出栈,放到a的对应的操作空间中去。

动态链接:

例如有个compute方法在执行,而compute方法则在方法区里执行,动态链接保存了该方法在方法区里面的入口地址。

 方法出口

还是compute方法为例,调用compute方法时会当时的现场位置保存到方法出口中,当compute方法调用完后,会根据方法出口中的位置,执行compute之后的内容。

方法区(元空间):

方法区里面保存了常量、静态变量和类信息(类加载的一些信息)

本地方法栈:

本地方法:native修饰的方法,底层是c++实现的。

如果调用了本地方法,就会在本地方法栈中开辟空间。

【深入理解JVM】JVM5相关推荐

  1. Java快速创建大量对象_3分钟 快速理解JVM创建对象的步骤!

    原标题:3分钟 快速理解JVM创建对象的步骤! 我们平时创建一个对象只需要new.然而我们知道对象的创建到底经历了哪些呢?实际上只不过仅仅的3步就完成了.先来看看完整的创建过程,再来一步一步的分析. ...

  2. java visualvm远程监控_深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...

  3. [译]深入理解JVM

    深入理解JVM 原文链接:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals 每个使用Java的开发者都知道Java ...

  4. 深入理解JVM(一)编译openJDK

    此文总结的很不错:https://www.cnblogs.com/ACFLOOD/p/5528035.html 准备openJDK源码和环境 1.在linux和macOS上编译openJDK更加友好, ...

  5. 深入理解JVM文章合集

    原文地址:http://ddrv.cn/a/88331 Java动态追踪技术探究 在Java虚拟机中,字符串常量到底存放在哪 一次生产 CPU 100% 排查优化实践 聊聊 Java 虚拟机:类的加载 ...

  6. 深入理解JVM(2)——GC算法与内存分配策略

    说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...

  7. java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解

    本文实例讲述了深入理解JVM之Java对象的创建.内存布局.访问定位.分享给大家供大家参考,具体如下: 对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含 ...

  8. 一文带你深入理解JVM内存模型

    一文带你深入理解JVM内存模型 一.JAVA的并发模型 共享内存模型 在共享内存的并发模型里面,线程之间共享程序的公共状态,线程之间通过读写内存中公共状态来进行隐式通信 该内存指的是主内存,实际上是物 ...

  9. 一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图)值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话:"八小时内谋生活,八小时外谋发展. ...

  10. 深入理解 JVM Class文件格式(十)

    到此, 所有关于class文件格式的重要内容都已经讲解完了, 不敢说面面俱到, 但是敢说大部分重要的内容都包含在内了.前前后后用了9篇博客来专门讲解class文件结构, 为什么花那么多的时间和精力来介 ...

最新文章

  1. boost 线程、互斥体、条件变量
  2. windows环境下,django + mongoengine + mongodb环境配置
  3. 查看 Android SDK Build-tools 版本号
  4. sql输出带颜色的字段_表输出步骤详解
  5. 《数据库系统实训》实验报告——系统安装与数据库搭建
  6. 永恒之塔修改服务器,[搬运工]永恒之塔单机版7.8 德国最新服务端
  7. Each interface on the back of the fuselage
  8. linux下安装和使用vnc
  9. JavaAPI在线帮助文档
  10. 分享:绘图不可不知的CAD经典技巧
  11. 计算机无法进入pe系统,u盘启动盘无法进入pe解决方法
  12. 如何免费申请js.org二级域名
  13. 向量的加减法与内外积
  14. 用博奥如何导入单项工程电子表_博奥工程系列软件实操手册第六册.doc
  15. 2022年10月 使用win11系统自带远程桌面,远程控制VMware虚拟机系统
  16. php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识 度量声音强度,大 - phpStudy...
  17. windows清理8080端口
  18. 笔记本电脑如何选购并安装内存条
  19. 51nod 1431 快乐排队
  20. WLAN(Wireless Local Area Network)——无线局域网

热门文章

  1. Springboot毕设项目学科竞赛推荐平台z7z28java+VUE+Mybatis+Maven+Mysql+sprnig)
  2. 服务器系统如何校验md5值,怎么验证md5-NTP的MD5加密
  3. 机房收费系统---报表
  4. 解决java.lang.ClassNotFoundException: org.apache.axis2
  5. Yii框架实现伪静态
  6. 绩效跃升地图读书笔记20130618
  7. phpMyAdmin 配置文件权限错误,不应任何用户都能修改 mac
  8. 除了学习PHP,还应该学什么?
  9. 不用软件直接查询QQ好友的IP地址(一)
  10. 消息队列超详解(以RabbitMQ和Kafka为例,为何使用消息队列、优缺点、高可用性、问题解决)