【实战JVM】-基础篇-03-Java内存结构

news2024/11/16 2:15:28

【实战JVM】-基础篇-03-Java内存结构

  • 1 运行时数据区
    • 1.1 总览
    • 1.2 程序计数器
      • 1.2.1 是否会内存溢出
    • 1.3 java虚拟机栈
      • 1.3.1 栈帧的组成
        • 1.3.1.1 局部变量表
        • 1.3.1.2 操作数栈
        • 1.3.1.3 帧数据
          • 1.3.1.3.1 动态链接
          • 1.3.1.3.2 方法出口
          • 1.3.1.3.3 异常表
      • 1.3.2 是否会内存溢出
      • 1.3.3 设置虚拟机栈大小
        • 1.3.3.1 注意事项
    • 1.4 本地方法栈
    • 1.5 堆
      • 1.5.1 是否会内存溢出
      • 1.5.2 Java堆
        • 1.5.2.1 Arthas查看堆内存
        • 1.5.2.2 默认参数
    • 1.6 方法区
      • 1.6.1 元信息
      • 1.6.2 运行时常量池
      • 1.6.3 字符串常量池
      • 1.6.4 神奇的intern
      • 1.6.5 方法区实现
      • 1.6.6 是否会内存溢出
      • 1.6.7 静态变量的存储
    • 1.7 直接内存


1 运行时数据区

运行时数据区负责管理jvm使用到的内存,比如创建对象和销毁对象。

1.1 总览

在这里插入图片描述

在这里插入图片描述

1.2 程序计数器

在这里插入图片描述

在这里插入图片描述

1.2.1 是否会内存溢出

在这里插入图片描述

简单来说,PC计数器就两个作用:

  • 对于单线程环境,保存下一条需要执行的指令的内存地址。
  • 对于进程来说,用于保存上下文信息,方便切换。

1.3 java虚拟机栈

在这里插入图片描述

1.3.1 栈帧的组成

在这里插入图片描述

1.3.1.1 局部变量表

在这里插入图片描述

在这里插入图片描述

  • 起始PC:表示根据字节码哪一行可以使用该局部变量
    • i就是在0、1之后完成初始化,234可以使用,所以长度是3,j就是1

在这里插入图片描述

在这里插入图片描述

静态方法的局部变量表不包括自己this,而实例方法中的局部变量表存放着this,局部变量也会占用槽

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.3.1.2 操作数栈

在这里插入图片描述

1.3.1.3 帧数据
1.3.1.3.1 动态链接

在这里插入图片描述

1.3.1.3.2 方法出口

在这里插入图片描述

1.3.1.3.3 异常表

在这里插入图片描述

1.3.2 是否会内存溢出

在这里插入图片描述

在这里插入图片描述

1.3.3 设置虚拟机栈大小

在这里插入图片描述

1.3.3.1 注意事项

在这里插入图片描述

1.4 本地方法栈

在这里插入图片描述

1.5 堆

在这里插入图片描述

成员变量存放于中,局部变量存放于中(由局部变量表维护)。

jdk8之前,静态变量存放在方法区中,jdk8之后,静态变量存放在中。

堆是线程共享的,所以针对需要多线程使用的环境,可以将变量变为静态变量以达到我们的需求。

1.5.1 是否会内存溢出

在这里插入图片描述

1.5.2 Java堆

在这里插入图片描述

1.5.2.1 Arthas查看堆内存
dashboard -i 刷新频率(毫秒)

查看堆内存used、total、max

在这里插入图片描述

1.5.2.2 默认参数

如果不设置默认参数,默认max是系统内存的1/4,total默认是系统内存的1/64。

在这里插入图片描述

建议将-Xmx和-Xms设置为相同的值,这样在程序启动之后可使用的总内存就是最大内存,而无需向java虚拟机再次申请,减少了申请并分配内存时间上的开销们也不会出现内存过剩之后,堆收缩的情况。

在这里插入图片描述

1.6 方法区

在这里插入图片描述

1.6.1 元信息

在这里插入图片描述

1.6.2 运行时常量池

解析阶段将常量池中的符号引用替换为直接引用

在这里插入图片描述

1.6.3 字符串常量池

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.6.4 神奇的intern

在这里插入图片描述

jdk6

在这里插入图片描述

jdk7之后

在这里插入图片描述

主要是因为jdk7之后,字符串常量池是在堆中的,而方法区是在永久代里的;jdk8字符串常量池是在堆中的,而方法区是在元空间里的。

1.6.5 方法区实现

在这里插入图片描述

在这里插入图片描述

1.6.6 是否会内存溢出

在这里插入图片描述

没有过高要求设置256M即可,但是元空间一定要设置。

1.6.7 静态变量的存储

在这里插入图片描述

1.7 直接内存

方法区是放在元空间中,属于操作系统中的直接内存。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

代码随想录算法训练营第三十六天 | 1005.K次取反后最大化的数组和、134.加油站、135.分发糖果

目录 1005.K次取反后最大化的数组和 思路 代码 代码 134.加油站 思路 代码 135.分发糖果 思路 代码 1005.K次取反后最大化的数组和 本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。 代码随想录 思路 直觉,直接写&…

基于YOLOv8的车牌检测与识别(CCPD2020数据集)

前言 本篇博客主要记录在autodl服务器中基于yolov8实现车牌检测与识别,以下记录实现全过程~ yolov8源码:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite 一、环境配置 …

粤嵌—2024/5/20—三角形最小路径和(✔)

代码实现&#xff1a; int minimumTotal(int **triangle, int triangleSize, int *triangleColSize) {if (triangleSize 1) {return triangle[0][0];}for (int i 1; i < triangleSize; i) {for (int j 0; j < triangleColSize[i]; j) {int x i - 1;int y1 j - 1, y2…

[JDK工具-5] jinfo jvm配置信息工具

文章目录 1. 介绍2. 打印所有的jvm标志信息 jinfo -flags pid3. 打印指定的jvm参数信息 jinfo -flag InitialHeapSize pid4. 启用或者禁用指定的jvm参数 jinfo -flags [|-]HeapDumpOnOutOfMemoryError pid5. 打印系统参数信息 jinfo -sysprops pid6. 打印以上所有配置信息 jinf…

LDAP: error code 32 - No Such Object

目前我的项目版本&#xff1a; Spring版本:5.3.15SpringBoot版本:2.6.3 完整错误 org.springframework.ldap.NameNotFoundException: [LDAP: error code 32 - No Such Object]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Objec…

多环境和前后多环境实战

文章目录 一.多环境1.1 什么是多环境1.2 多环境分类1.2.1 本地环境&#xff08;自己的电脑&#xff09;1.2.2 开发环境&#xff08;远程开发&#xff09;1.2.3 测试环境1.2.4 预发布环境1.2.5 正式环境1.2.6 沙箱环境&#xff08;实验环境&#xff09; 1.3 如何实现1.3.1 抽象配…

Git--本地仓库

文章目录 工作区和暂存区工作区&#xff08;Working Directory&#xff09;版本库&#xff08;Repository&#xff09; 初始化git仓库添加文件到版本库步骤 查看修改内容查看工作区和暂存区状态已add文件已修改/新增 的未add文件git跟踪修改原理 查看提交历史版本回退撤销修改撤…

C++/ cuda kernel中的模版元编程识别 kernel 模版的数据类型

1&#xff0c;模版元编程 模板元编程是一种利用 C 模板系统在编译时进行计算和生成代码的技术。其原理基于模板特化、递归、模板参数推导等特性&#xff0c;通过模板实例化和展开&#xff0c;在编译时生成代码&#xff0c;以实现在编译期间进行复杂计算和代码生成的目的。 2&am…

化学中的不确定性。

化学中的不确定性TOC 基于元素分析的无机化学的理论大厦应该说早已落成了&#xff0c;但是却仍然存在着一些列的难解甚至是无解问题&#xff0c;这些大多是在使用理论解释现象时遇到的困难&#xff0c;有些则是在生产实践中生产工艺和生产工序设计和优化中发现的问题。于是&…

音视频开发8 音视频中SDL的使用,SDL 在windows上环境搭建,SDL 使用 以及 常用 API说明,show YUV and play PCM

1.SDL简介 SDL&#xff08;Simple DirectMedia Layer&#xff09;&#xff0c;是一个跨平台的C语言多媒体开发库。 支持Windows、Mac OS X、Linux、iOS、Android 提供对音频、键盘、鼠标、游戏操纵杆、图形硬件的底层访问 很多的视频播放软件、模拟器、受欢迎的游戏都在使用…

【移动云】云端赋能——数字化时代游戏与工作的新境界

前言 在当今这个信息化、数字化的时代&#xff0c;云计算、大数据和人工智能等前沿技术已经深入到我们生活的方方面面。作为我国通信行业的领军企业&#xff0c;中国移动凭借其在5G技术领域的领先优势&#xff0c;推出了基于移动云计算技术的云业务品牌——移动云。移动云以云操…

CSS浮动(CSS从入门到精通学习第四天)

css第04天 一、其他样式 1、圆角边框 在 CSS3 中&#xff0c;新增了圆角边框样式&#xff0c;这样我们的盒子就可以变圆角了。 border-radius 属性用于设置元素的外边框圆角。 语法&#xff1a; border-radius:length; 参数值可以为数值或百分比的形式如果是正方形&…

Win11系统CMD乱码

1. 背景 在打包前端代码的时候&#xff0c;看到系统控制台中竟然出现了乱码。想到之前就曾经出现过因为影响不大就一直放着没管。今天有空就把问题解决掉吧。 2. 解决过程 2.1 问题定位 在命令行中执行 chcp&#xff0c;看到返回结果如下 Active code page: 936936 代表的…

浅谈金融行业数据安全分类分级

数据安全管理是一项从上而下的、多方配合开展的工作。在进行数据安全管理组织架构建设时&#xff0c;需要从上而下建设&#xff1b;从而全面推动数据安全管理工作的执行和落地&#xff1b;以保证数据安全的合法合规、并长效推动业务的发展和稳定运行。 金融行业机构应设立数据…

五种独立成分分析(ICA)

代码原理及流程 代码实现了混合信号的独立成分分析&#xff08;ICA&#xff09;过程&#xff0c;主要包括以下几个步骤&#xff1a; 原始语音信号读取与显示&#xff1a;首先读入原始的两个语音信号(music.wav和man.wav)&#xff0c;并显示在图中的第一和第二个子图中。混合声…

ROS参数服务器

一、介绍 参数服务器是用于存储和检索参数的分布式多机器人配置系统&#xff0c;它允许节点动态地获取参数值。 在ROS中&#xff0c;参数服务器是一种用于存储和检索参数的分布式多机器人配置系统。它允许节点动态地获取参数值&#xff0c;并提供了一种方便的方式来管理和共享配…

redis--消息队列

分类 生产者消费模式 发布者订阅模式 生产者消费模式 在生产者消费者(Producer/Consumer)模式下&#xff0c;上层应用接收到的外部请求后开始处理其当前步骤的操作&#xff0c;在执行完成后将已经完成的操作发送至指定的频道(channel)当中&#xff0c;并由其下层的应用监听…

Java筑基(三)

Java筑基&#xff08;三&#xff09; 一、final概念1、案例1&#xff1a;采用继承&#xff1a;2、案例2&#xff1a;final修饰的类不可以被继承&#xff1a;3、案例3&#xff1a;final修饰的类不能有子类&#xff0c;但是可以有父类4、final修饰构造方法5、final修饰普通方法6、…

《Python源码剖析》之pyc文件

前言 前面我们主要围绕pyObject和pyTypeObject聊完了python的内建对象部分&#xff0c;现在我们将开启新的篇章—python虚拟机&#xff0c;将聚焦在python的执行部分&#xff0c;搞懂从“代码”到“执行”的过程。开启新的篇章之前&#xff0c;你也许会有一个疑惑&#xff1a;我…

aws 接入awsIOT平台的证书签发逻辑

参考资料 https://aws.amazon.com/cn/blogs/china/certification-vending-machine-intelligent-device-access-aws-iot-platform-solution/ IoT 设备与 AWS IoT Core 的 MQTT 通信使用基于证书的 TLS 1.2双向认证体系。所谓的双向认证&#xff0c;即意味着 IoT 设备端需安装 …