Java内存区域

Java内存区域

Java内存区域就是Java运行时数据区

  • 线程私有的:程序计数器、虚拟机栈、本地方法栈
  • 线程共享的:堆、方法区

1.程序计数器

程序计数器是什么:可以看作是当前线程所执行的字节码的行号指示器

程序计数器的作用:

  • 实现代码的流程控制
  • 确保线程切回时抵达正确位置

2.虚拟机栈

栈是 JVM 运行时数据区域的一个核心,除了一些 Native 方法是本地方法栈实现的

其他所有 Java 方法的调用都是由虚拟机栈协助执行的

虚拟机栈由一个个栈帧组成,栈帧的组成有:

  • 局部变量表
  • 操作数栈
  • 动态链接
  • 方法返回地址

接下来我们一个个说明他们的作用

局部变量表

局部变量表用来存放:

  • 方法的this对象
  • 方法的参数
  • 方法内部定义的局部变量

局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序被编译成Class文件时,就在方法的Code属性的max_locals数据项中确定了该方法所需要分配的最大局部变量表的容量。

操作数栈

操作数栈也是栈结构,可以简单的理解它的作用就是方法中变量进行运算

动态链接

主要服务一个方法调用另一个方法的场景

动态链接的作用就是为了将符号引用转换为直接引用

方法返回

无论方法采用何种方式退出,在方法退出后都需要返回到方法被调用的位置,程序才能继续执行,方法返回时可能需要在当前栈帧中保存一些信息,用来帮他恢复它的上层方法执行状态。
方法退出过程实际上就等同于把当前栈帧出栈,因此退出可以执行的操作有:恢复上层方法的局部变量表和操作数栈,把返回值(如果有的话)压入调用者的操作数栈中,调整PC计数器的值以指向方法调用指令后的下一条指令。
一般来说,方法正常退出时,调用者的PC计数值可以作为返回地址,栈帧中可能保存此计数值。而方法异常退出时,返回地址是通过异常处理器表确定的,栈帧中一般不会保存此部分信息。

3.本地方法栈

调用Native方法

4.堆

堆是线程共享的。

JDK7版本以及JDK7版本之前,堆内存通常分为下面三部分:

  1. 新生代(年轻代)内存
  2. 老年代
  3. 永久代

下图中的Eden区、两个S区S0、S1都属于新生代

在这里插入图片描述

在这里插入图片描述

JDK8版本之后永久代被元空间取代,元空间使用的是直接内存

在这里插入图片描述

元空间,不再与堆连续,而是直接存在于本地内存,也就是机器的内存。理论上机器内存有多大,元空间就有多大。

在之前的版本中,字符串常量池存在于永久代中,在大量使用字符串的情况下,容易出现OOM异常,此外JVM加载的class总数、方法的大小等都很难确定,因此对永久代大小难以确定。

5.方法区

当虚拟机要使用一个类时,它需要读取并解析 Class 文件获取相关信息,再将信息存入到方法区。方法区会存储已被虚拟机加载的 类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据

主要是存放一个类的:

基础信息

常量池

字段

方法

法区会存储已被虚拟机加载的 类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据

主要是存放一个类的:

基础信息

常量池

字段

方法

属性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open3D 进阶(21)无序点云平面检测的鲁棒统计方法

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法过程 除了寻找具有最大支持的单个平面外,Open3D还包含一个算法,该算法使…

于月仙主动与赵本山握手表示欢迎,赵:怎么着要跟我第二次牵手啊?

于月仙主动与赵本山握手表示欢迎,赵:怎么着要跟我第二次牵手啊? --小品《乡村爱情》(中1)的台词 表演者:赵本山 于月仙 王小利 唐鉴军等 (接上) 咱们呢就给新人揭盖头 好 好长贵…

STM32 (4) GPIO(1)

1.芯片的引脚分布 2.普通IO引脚的命名规则 3.IO复用 IO引脚身兼数职的现象叫做IO复用,可以使芯片拥有更多的功能,例如: PA9和PA10既可以用于GPIO的引脚,也可以用于串口或定时器的引脚 通用:CPU直接控制IO引脚的输入输…

Leetcode热题100道

Leetcode热题100道 👏作者简介:大家好,我是 枫度柚子🍁,Java摆烂选手,很高兴认识大家 👀 📕CSDN/掘金/B站: 枫吹过的柚 🍁 🔥如果感觉博主的文章还不错的话&a…

FreeRTOS(一)FreeRTOS基础知识

目录 简单介绍 FreeRTOS基础知识 任务调度 抢占式调度: 举例说明: 时间片调度 举例说明 任务状态 FreeRTOS中4种任务状态 四种任务状态转换图 任务状态列表 今天开个新坑----FreeRTOS 简单介绍 FreeRTOS是一个轻量级的实时操作系统&#xf…

修复通达OA 百度ueditor 文件上传漏动

前些日子,服务器阿里云监控报警,有文件木马文件,因为非常忙,就没及时处理,直接删除了木马文件了事。 谁知,这几天对方又上传了木马文件。好家伙,今天不花点时间修复下,你都传上瘾了…

【风格迁移】对比度保持连贯性损失 CCPL:解决图像局部失真、视频帧间的连贯性和闪烁

对比度保持连贯性损失 CCPL:解决图像局部失真、视频帧间的连贯性和闪烁 提出背景解法:对比度保持连贯性损失(CCPL) 局部一致性假设 对比学习机制 邻域调节策略 互信息最大化对比学习:在无需标签的情况下有效学习区分…

【软件设计师】通俗易懂的去了解算法的时间复杂度

🐓 时间复杂度 常用排序的时间复杂度 时间频度 算法需要花费的时间,和它语句执行的次数是成正比的,所以会把一个算法种语句执行次数称为语句频度和时间频度、记作T(n)。 定义 时间复杂度就是找到一个无限接近时间频度T(n)同数量级的函数&am…

VMware安装DOS 7.1

VMware安装DOS 7.1 helpfasthelpdoshelp

【重温设计模式】职责链模式及其Java示例

职责链模式的介绍 在开发过程中,我们经常会遇到这样的问题:一个请求需要经过多个对象的处理,但是我们并不知道具体由哪个对象来处理,或者说,我们希望由接收到请求的对象自己去决定如何处理或者是将请求传递给下一个对…

mysql学习笔记7——索引与联合查询,引擎与字符编码

索引相当于给数据库加了个目录,加入索引可以优化查询速度 添加主键可以 增加索引 添加普通索引,普通索引没有其他约束效果 在mysql中可以将查询出的结果插入新表中 联合查询 在mysql对文件读写中存在两种引擎,innodb与myisam,其中…

【自然语言处理】NLP入门(三):1、正则表达式与Python中的实现(3):字符转义符及进制转换

文章目录 一、前言二、正则表达式与Python中的实现1.字符串构造2. 字符串截取3. 字符串格式化输出4. 字符转义符a. 常用字符转义符续行符换行符制表符双引号单引号反斜杠符号回车符退格符 b. ASCII编码转义字符进制转换2 进制8 进制10 进制16 进制进制转换函数 c. Unicode字符\…

关于淘宝的nodejs镜像网址更新后,前端项目出现的一系列问题解决方案。

问题 npm install,之前是成功的,最近不成功。 原因 之前的npm.taobao.org镜像源已经停用 解决方法 把所有的npm.taobao.org替换成npmmirror.com,这个新的淘宝镜像地址 如果使用nvm(没有忽略)需要修改如下: nvm node_mirror…

文字写作困扰?这6款AI写作助手帮你一键解决

有时候写作的时候我们可能会陷入创作困境,思绪纷乱,难以找到合适的表达方式。在此小编特别为大家推荐一些外非常好用的 AI 写作助手,帮助你克服这些问题。让我们来看看其中的6款软件: 1、爱制作AI写作生成器 爱制作AI主要功能是协…

第12届智能计算与无线光通信国际会议(ICWOC 2024)即将召开!

2024年第12届智能计算与无线光通信国际会议(ICWOC 2024)将于2024年6月21-23日在中国重庆召开。随着深度学习等人工智能技术的不断进步,以自动化、自治为特征的智能应用预计将激增。本届会议主题为“光通信智能链接”,旨在为相关技…

js script中的defer和async

在HTML中&#xff0c;<script>标签可以使用async和defer两个属性来控制外部JavaScript文件的加载和执行方式。这两个属性的目的是优化页面加载时间&#xff0c;但它们以不同的方式工作。下面是每个属性的具体说明&#xff1a; async属性 当你给<script>标签添加a…

经典思路!人参叶际微生物如何发8分文章?

中国中医科学院中药研究所在《Environmental Microbiome》期刊上(IF7.9)发表了关于叶际真菌微生态网络的文章&#xff0c;该研究通过对ITS测序结果和环境因子测定结果以及皂苷含量测定结果进行生信分析&#xff0c;提出了维持微生态网络的稳定性策略和影响皂苷含量的因素。 期刊…

还在用微信截图吗?这2个免费软件你不能错过

大家好&#xff0c;我是知微&#xff01; 说到截图&#xff0c;大家会想到哪款软件呢&#xff0c;是windows系统自带的截图软件&#xff0c;还是登录微信后按AltA触发截图功能&#xff1f; 很多人平时都在使用微信或者QQ截图&#xff0c;但是这种每次都得联网登录才能使用&am…

unity-1

创建游戏对象&#xff08;游戏物体&#xff09; 可通过unity中的菜单栏中的Gameobject创建&#xff1b;也可在Hierarchy&#xff08;层级&#xff09;中创建&#xff0c; 双击即可居中看到。 在Hierarchy空白处右键即可看到&#xff0c;能创建游戏对象。 在Scene框中&#x…

驱动开发面试复习

创建字符设备 1 创建设备号 alloc_chrdev_region 2.创建cdev cdev_init 3.添加一个 cdev,完成字符设备注册到内核 cdev_add 4.创建类 class_create 5.创建设备 device_create 1.内核空间与用户空间数据 copy_from_user 和copy_to_user 俩个函数来完成。 copy_from_user 函数…