JVM 内存区域

一、运行时数据区域

Java 虚拟机在执行 Java 程序的过程中,会把它管理的内存划分成若干个不同的数据区域。
JDK 1.8 和之前的版本略有不同,这里介绍 JDK 1.7 和 JDK 1.8 两个版本。

JDK 1.7:

在这里插入图片描述
线程私有:

  • 程序计数器
  • 虚拟机栈
  • 本地方法栈

线程共享:

  • 方法区
  • 直接内存

JDK 1.8

在这里插入图片描述
线程私有:

  • 程序计数器
  • 虚拟机栈
  • 本地方法栈

线程共享:

  • 直接内存
  • 元空间

程序计数器

程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳跃、异常处理、线程恢复等功能都需要依赖这个计数器来完成。
为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间计数器互不影响,独立存储。

虚拟机栈

线程私有,它的生命周期和线程相同,随着线程的创建而创建,随着线程的死亡而死亡。
除了一些 Native 方法调用是通过本地方法栈实现的,其他所有的 Java 方法调用都是通过栈来实现。
方法调用的数据需要通过栈进行传递,每一次方法调用都会有一个对应的栈帧被压入栈中,每一个方法调用结束后,都会有一个栈帧被弹出。
栈由一个个栈帧组成,而每个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法返回地址。

在这里插入图片描述

局部变量表

主要存放了编译期可知的各种数据类型(boolean、byte、char、short、int、float、long、double)、对象引用。
在这里插入图片描述

操作数栈

主要作为方法调用的中转站使用,用于存放方法执行过程中产生的中间计算结果。另外,计算过程中产生的临时变量也会放在操作数栈中。

动态链接

主要服务一个方法需要调用其他方法的场景。Class文件的常量池里保存有大量的符号引用比如方法引用的符号引用。当一个方法要调用其他方法,需要将常量池中指向方法的符号引用转化为其在内存地址中的直接引用。动态链接的作用就是为了将符号引用转换为调用方法的直接引用,这个过程也被称为动态链接。

本地方法栈

和虚拟机栈所发挥的作用非常相似,区别是虚拟机栈为虚拟机执行 Java 方法服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。

Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。
Java 堆是垃圾收集器管理的主要区域,因此也被称作 GC 堆(Garbage Collected Heap)。从垃圾回收的角度,由于现在的收集器基本都采用分代垃圾收集算法,所以 Java 堆还可以细分为:新生代和老年代;再细致一点有:Eden、Survivor、Old 等空间。进一步划分的目的是更好地回收内存,或者更快地分配内存。
JDK 7及之前的版本,堆内存通常分为以下三部分:

  • 新生代(Young Generation)
  • 老生代(Old Generation)
  • 永久代(Permanent Generation)
    下图的 Eden 区、两个Survivor 区 S0 和S1都属于新生代,中间一层属于老年代,最下面一层属于永久代。
    在这里插入图片描述
    JDK 8 版本及以后永久代(Permanent Generation)已被元空间(MetaSpace)取代,元空间使用的是本地内存。
    在这里插入图片描述
    大部分情况,对象首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 S0 或者 S1,并且对象的年龄会加1(Eden 区 -> Survivor 区后对象的初始年龄变为1),当它的年龄增加到一定程度(默认为15岁),就会晋升到老年代中。

为什么年龄只能是0-15?
因为记录年龄的区域在对象头中,这个区域的大小通常是4位,这4位可以表示的最大二进制数字是1111,即十进制的15。因此,对象的年龄被限制为0到15。

方法区

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

运行时常量池

Class 文件中除了有类的版本、字段、方法、接口等描述信息外,还有用于存放编译器生成的各种字面量和符号引用的常量池表。
字面量是源代码中的固定值的表示法,即通过字面我们就能知道其值的含义。字面量包括整数、浮点数和字符串字面量。常见的符号引用包括类符号引用、字段符号引用、方法符号引用、接口方法符号。

字符串常量池

字符串常量池是 JVM 为了提升性能和减少内存开销针对字符串专门开辟的一块区域,主要目的是为了避免字符串重复创建。

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

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

相关文章

Filebrowser 本地网盘部署aidlux

nexctcloud不会优化,网页巨卡,故选用轻量化网盘。 直接抄 下载 mkdir /opt/filebrowser cd /opt/filebrowser wget https://github.moeyy.xyz/https://github.com/filebrowser/filebrowser/releases/download/v2.30.0/linux-arm64-filebrowser.tar.gz tar -zxvf linux-arm…

OnlyOffice8.1新功能测评

一、导语 时隔四个月,OnlyOffice推出了8.1版本。 四个月过去,笔者的项目也接近尾声,在项目过程中还把OnlyOffice插件推荐给了项目组,希望官方多出好用功能,造福我们广大项目O(∩_∩)O 回归正题,与前几个…

如何加速AI原生应用进程?华为云开天aPaaS提出新范式

每一次新旧代际转换时,都会上演这样的一幕:“畅想很多,落地很少”,AI原生应用似乎也不例外。 关于AI原生应用的呼声已经持续一段时间,但普通用户对“AI原生”依然陌生。除了新业态普及的周期性,AI原生应用…

基于在校学习平台MOOC的选课推荐系统

基于在校学习平台MOOC的选课推荐系统 1、效果 在线demo,点我查看 2、功能 根据学生于在校学习平台MOOC学习期间的选课记录等相关特征来对学生进行课程推荐。 采用数据挖掘技术,包括BPR、FM、CF,神经网络推荐,用户协同过滤推荐…

django后台登录:Forbidden (403) CSRF verification failed.

Djangodockernginxuwsgi部署项目时,项目部署完成后,访问Django admin后台登录时报错: http://xxxx/admin/login/?next/admin/ 请求方法: POST 状态代码: 403 Forbidden 然后百度发现的解决办法如下: http://t.csdnimg.cn/SmSWl…

Kubernetes之CSI详解

如何更好的用好Kubernetes CSI?本文尝试从CSI简介、CSI控制器实现原理、实现示例及最佳实践4方面进行阐述。希望对您有所帮助! 一、Kubernetes CSI 简介 CSI (Container Storage Interface) 是一种标准化的接口,用于在容器编排平台&#xf…

尚品汇-(六)

(1)属性的添加修改 平台属性对象: package com.atguigu.gmall.model.product;import com.atguigu.gmall.model.base.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.Tab…

GitHub每日最火火火项目(6.24)

modelscope / DiffSynth-Studio: 项目介绍:DiffSynth-Studio 是一个基于扩散模型的音频合成工具,它可以生成各种逼真的音频效果,如乐器演奏、环境声音等。该项目提供了一个易于使用的界面,让用户可以通过简单的操作来创…

市盈率(Price-Earnings Ratio)是什么?股市中还结合哪些指标分析一家公司?

市盈率是什么? 中文版 市盈率(Price-Earnings Ratio, P/E Ratio) 是一种评估公司股票价值的重要财务指标。它是通过将公司的股票价格(Price)除以每股收益(Earnings per Share, EPS)计算得出的…

基于Pytorch框架构建ResNet模型

Pytorch 一、训练模型1.导入资源包2.定义数据预处理3.读取数据 二、定义卷积神经网络1.导入必要的库2.定义名为convolutional_block的卷积块类3.定义了一个名为identity_block的恒等块类4.定义了一个名为Resnet的深度卷积神经网络类 三、创建模型1. 检查GPU设备2. 训练过程 四、…

玄机平台流量特征分析—蚂蚁爱上树

前言 依旧是流量分析,老规矩先看看要求。 步骤1.1 这里要求我们找到admin的密码,ctrlf筛选出product2.php的访问包,因为只有这类型流量包才有东西。其他的流量包都是没啥用的,至于我为啥知道,因为每个类型的流量包我…

地信大四,实习重要吗?怎么找实习岗位?

“地信怎么找实习啊?” “实习三个月以上?暑假只有两个月啊” “什么岗位实习比较有用?” “助理类岗位是做什么?” …… 同学们好啊,不知不觉24年已经是过完一小半了,24届毕业的同学们也差不多就要迎来…

快手2019年秋季校园招聘笔试试卷—工程A试卷

a/b 题目描述 求 a/b 的小数表现形式。如果 a 可以整除 b 则不需要小数点。如果是有限小数&#xff0c;则可以直接输出。如果是无限循环小数&#xff0c;则需要把小数循环的部分用"()"括起来。 输入描述 两个整数a和b&#xff0c;其中 0 < a < 1000 000 1…

测试工程师如何学习系统架构

面对同一个“知识点”不同的工作角色需要考虑的问题不一样&#xff0c;比如在系统架构中会使用到消息队列功能&#xff0c;系统架构师&#xff0c;开发人员&#xff0c;测试人员&#xff0c;运维人员&#xff0c;需求人员等需要考虑的问题不一样。 系统架构师在考虑消息队列功能…

数电大作业-四输入表决器

&#xff08;PCB和multisim仿真画的有很大问题&#xff0c;没有VCC输入和GND&#xff0c;没学过直接裸画的&#xff0c;之后会好好看视频学习&#xff09; 应用背景&#xff1a; 四个评委&#xff0c;三个及以上评委同时按下通过按钮时&#xff0c;选手才能通过。否则不通过。…

自动驾驶ADAS

1 ToF摄像头分类 1.1 ToF原理 类似雷达测距&#xff0c;生成3D点云&#xff0c;或者叫3D贴图。ToF相机的分辨率一般在3万像素左右。ToF距离计算公式如图所示。 Figure 1-1 ToF距离计算公式 D&#xff1a;距离 c&#xff1a;光速 PHI&#xff1a;相位差 fmod&#xff1a;调制频率…

创新指南|品牌电商新策略:五大转型思路与RGM举措

在流量红利过去的背景下&#xff0c;品牌电商面对多渠道运营的难题&#xff0c;如缺乏统盘经营、绩效管理分散、价格战失控、用户体验不足以及流量过度依赖&#xff0c;品牌电商如何有效应对这些挑战&#xff0c;本文从5个维度探讨全渠道电商RGM破局之路&#xff0c;实现品牌的…

pyppeteer模块经常使用的功能,相关操作案例

官方仓库地址&#xff1a;https://github.com/miyakogi/pyppeteer 官方文档地址&#xff1a;API Reference — Pyppeteer 0.0.25 documentation Selenium环境的相关配置比较繁琐&#xff0c;此外&#xff0c;有的网站会对selenium和webdriver进行识别和反爬&#xff0c;因此在…

区块链小故事

大灰狼与小白兔 一天兔子妈妈出门了&#xff0c;在大门上安装了一个区块链的门把手&#xff0c;这个门把手只有兔子妈妈、小兔子、以及另一个客人都同意的时候&#xff0c;才会开门&#xff0c;有一天客人a的钥匙丢了&#xff0c;被大灰狼捡到了&#xff0c;大灰狼于是去开门&…

【MySQL】数据库——事务

一.事务概念 事务是一种机制、一个操作序列&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这一组数据库命令要么都执行&#xff0c;要么都不执行事务是一个不可分割的工作逻辑单元&#xff0c;在数…