JVM从1%到99%【精选】-运行时数据区

目录

1.总览运行时数据区

2.内存溢出

3. 程序计数器

 4.虚拟机栈

5.本地方法栈

6.堆 

7.方法区 

8.直接内存 


1.总览运行时数据区

  • Java虚拟机在运行Java程序过程中管理的内存区域,称之为运行时数据区。
  • 运行时数据区可以分为方法区虚拟机栈本地方法栈程序计数器

2.内存溢出

内存溢出:程序在使用某一块内存区域时,存放的数据需要占用的内存大小超过了卢划机能坦供的内存上限 ​​​​​​​

3. 程序计数器

  • 程序计数器(Program Counter Register)也叫PC寄存器:
    • 每个线程会通过程序计数器记录当前要执行的的字节码指令的地址
    • 每一条字节码指令都会拥有一个内存地址。
  • 程序计数器是不会发生内存溢出的,因为每个线程只存储一个固定长度的内存地址。

 4.虚拟机栈

  • Java虚拟机栈(Java Virtual Machine Stack)采用栈的数据结构来管理方法调用中的基本数据,先进后出(First in Last Out) ,每一个方法的调用使用一个栈帧(Stack Frame)来保存。
  • Java虚拟机栈随着线程的创建而创建,而回收则会在线程的销毁时进行。
  • 由于方法可能会在不同线程中执行,每个线程都会包含一个自己的虚拟机栈。

Java虚拟机栈 - 栈帧的组成:

 

  • 1.局部变量表
    • ​​​​​​​局部变量表的作用是在运行过程中存放所有的局部变量
    • 局部变量表保存的内容有:实例方法的this对象,方法的参数,方法体中声明的局部变量。
    • 局部变量表中的槽是可以复用的,一旦某个局部变量不再生效,当前槽就可以再次被使用
  • 2.操作数栈
    • ​​​​​​​操作数栈是栈帧中虛拟机在执行指令过程中用来存放临时数据的一块区域
  • 3.帧数据:帧数据主要包含动态链接、方法出口、异常表的引用

Java虚拟机栈-帧数据:

  • 方法出口指的是方法在正确或者异常结束时,当前栈帧会被弹出,同时程序计数器应该指向上一个栈帧中的下一条指令的地址。
  • 在当前栈帧中,需要存储此方法出口的地址

Java虛拟机栈-栈内存溢出:

  • Java虚拟机栈如果栈帧过多,占用内存超过栈内存可以分配的最大大小就会出现内存溢出
  • 要修改Java虚拟机栈的大小,可以使用虚拟机参数(-Xss栈大小 )

5.本地方法栈

  • Java虚拟机栈存储了Java方法调用时的栈帧,而本地方法栈存储的是native本地方法的栈帧。
  • 在Hotspot虚拟机中,Java虚拟机栈和本地方法栈实现上使用了同一个栈空间。 

6.堆 

 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。

  • used:当前已使用的堆内存
  • total:java虚拟机已经分配的可用堆内存
  • max:java虚拟机可以分配的最大堆内存

堆区的溢出:

  • 堆内存大小是有上限的,并且会发生内存溢出

7.方法区 

方法区是存放基础信息的位置,线程共享,主要包含三部分内容:

  • 类的元信息:保存了所有类的基本信息
  • 运行时常量池:保存了字节码文件中的常量池内容
  • 字符串常量池:保存了字符串常量

方法区(Method Area)溢出:

  • JDK7将方法区存放在堆区域中的永久代空间,堆的大小由虚拟机参数-XX: MaxPermSize=值来控制。 
  • JDK8将方法区存放在元空间中,元空间位于操作系统维护的直接内存中,默认情况下只要不超过操作系统承受的上限,可以一直分配。可以使用-XX:MaxMetaspaceSize=值将元空间最大大小进行限制。

8.直接内存 

  • 直接内存(Direct Memory)并不在《Java虚拟机规范》中存在,所以并不属于Java运行时的内存区域
  • 主要为了解决以下两个问题:
    • 1、Java堆中的对象如果不再使用要回收,回收时会影响对象的创建和使用。
    • 2、IO操作比如读文件,需要先把文件读入直接内存(缓冲区)再把数据复制到Java堆中。现在直接放入直接内存即可,同时Java堆上维护直接内存的引用,减少了数据复制的开销。写文件也是类似的思路。
  • 如果需要手动调整直接内存的大小,可以使用-XX:MaxDirectMemorySize=大小

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

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

相关文章

美国分析人工智能技术对网络格局的影响(下)

文章目录 前言六、边际效应和威胁七、将人工智能纳入美国网络战略总结前言 以生成式人工智能在网络犯罪市场中的作用为例。利用生成式人工智能(无论是通过生成文本、语音还是图像)的近期威胁之一是在网络操作的初始访问阶段将此类内容用于社会工程和鱼叉式网络钓鱼。例如,一…

vscode 通过ssh 远程执行ipynb +可以切换conda env

主要是保证几个点 远程服务器python 环境没问题 conda这些也都有的ssh的账户 是有conda权限的没有免密就输入密码 免密教程就是最基本的那种 公钥copy过去就行了vscode 那几个插件都要装好 开始操作 首先 vscode 点击左侧工具栏中的扩展,搜索“ssh”,…

7.STL中string的一些超常用函数 (附习题)

目录 1.find 2.atoi 3.to_string 4.getline 【leetcode 习题】 387.字符串中的第一个唯一字符 125. 验证回文串 1.find 1.查找第一次出现的目标字符串:说明:如果查找成功则输出查找到的第一个位置,否则返回-1; s1.find(s2…

linux安装Openresty

安装必要的依赖库 指定仓库地址 下载openresty 添加环境变量 vi /etc/profile i export NGINX_HOME/usr/local/openresty/nginx/ export PATH${NGINX_HOME}/sbin:$PATH esc :wq source /etc/profile #启动 nginx # 重启 nginx -s reload #关闭 nginx -s stop

2024年低碳发展与新能源技术国际学术会议(ICLCDNET 2024)

2024年低碳发展与新能源技术国际学术会议(ICLCDNET 2024) 2024 International Conference on Low Carbon Development and New Energy Technologies 一、【会议简介】 随着全球气候变化的日益严峻,低碳发展和新能源技术已成为国际社会共同关注的焦点。在…

python怎么读取xml

引入XML组件&#xff1a;import xml.dom.minidom。 创建一个xml文件&#xff0c;<?xml version"1.0" encoding"utf-8"?>。 加载读取XML文件&#xff0c;xml.dom.minidom.parse(abc.xml)&#xff0c;这是xml文件的对象。 获取XML文档对象&#xff0…

柯桥法语学习-5大法语听写网站:全力助攻你的dictée!

提到法语dicte&#xff0c;绝对可是法语学生们的老大难&#xff0c;简直就是心痛得不能自已啊&#xff01;所以今天&#xff0c;法语君整理了5个听写网站助攻大家的dicte哦&#xff01; Projet Voltaire 01 一个很容易让你对dicte上瘾的APP 写邮件、实习报告或者动机信时&…

数据新探:用Python挖掘互联网的隐藏宝藏

Hello&#xff0c;我是你们的阿佑&#xff0c;今天给大家上的菜是——数据存储&#xff01;听起来枯燥无味&#xff1f;错了&#xff01;阿佑将带你重新认识数据存储的艺术。就像为珍贵的艺术品寻找完美的展览馆&#xff0c;为你的数据选择合适的存储方式同样重要&#xff01; …

基准电流源电路仿真

1.补全电路 2.更改vpluse属性 3.添加tran仿真&#xff0c;因为加入启动电路主要看的就是tran仿真 4.启动仿真 5.看电路曲线 先点这个main form 不用选择ok&#xff0c;直接点中四条线&#xff0c;中间第2条曲线如果出现那样一个小波动后面没有起伏就说明成功了。

一篇文章带你入门CSRF

1.什么是CSRF 用一个形象生动的比喻就是&#xff1a; 你给朋友的房子留下了备用钥匙&#xff0c;但是有人偷偷拿走了这把钥匙&#xff0c;然后用这把钥匙进入了你朋友的房子并做了各种坏事。你朋友以为只有你能使用这把钥匙&#xff0c;所以没对任何操作产生怀疑。 在这个比…

.NET周刊【5月第2期 2024-05-12】

国内文章 C#在工业数字孪生中的开发路线实践 https://mp.weixin.qq.com/s/b_Pjt2oii0Xa_sZp_9wYWg 这篇文章探讨了C#在工业数字孪生技术中的应用&#xff0c;介绍了三种基于C#的数字孪生系统实现方案&#xff1a; WPF Unity&#xff1a;结合WPF技术和Unity引擎&#xff0c…

算法练习day8

反转字符串 代码随想录 0344.反转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; &#xff08;用时&#xff1a;0.05小时&#xff09; 思路 这道题很简单也很经典。 字符串的反转方法有很多&#xff0c;我这里是用for循环通过数组长度和下标计算来交换。…

如何用Rust获取CPU、内存、硬盘的信息?

目录 一、用Rust获取CPU、内存、硬盘的信息 二、知识点 systemstat 一、用Rust获取CPU、内存、硬盘的信息 首先&#xff0c;需要添加systemstat库到Cargo.toml文件&#xff1a; [dependencies] systemstat "0.2.3" 在Rust代码中使用它&#xff1a; extern crat…

pip镜像源

1.1 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple 1.2 阿里云 https://mirrors.aliyun.com/pypi/simple/ 1.3 网易 https://mirrors.163.com/pypi/simple/ 1.4 豆瓣 https://pypi.douban.com/simple/ 1.5 百度云 https://mirror.baidu.com/pypi/simple/ 1.6 中科大 ht…

Android 集成Bugly完成线上的异常Exception收集及处理

文章目录 &#xff08;一&#xff09;添加产品APP&#xff08;二&#xff09;集成SDK&#xff08;三&#xff09;参数配置权限混淆 &#xff08;四&#xff09;初始化 &#xff08;一&#xff09;添加产品APP 一&#xff09;在个人头像 -> 我的头像 -> 新建产品 二&…

基于IDEA快速创建一个SpringMVC项目并且配置Tomcat

1&#xff0c;打开IDEA&#xff0c;新建Maven项目【使用web模板创建】 使用社区版的同学创建普通的maven项目&#xff0c;并配置项目的webapp&#xff0c;详情可参考 快速创建一个SpringMVC项目&#xff08;IDEA&#xff09; 2&#xff0c;在main目录下创建Java和resource目录…

原生小程序开发如何使用 tailwindcss

原生小程序开发如何使用 tailwindcss 原生小程序开发如何使用 tailwindcss 前言什么是 weapp-tailwindcss ?0. 准备环境以及小程序项目1. 安装与配置 tailwindcss 0. 使用包管理器安装 tailwindcss1. 在项目目录下创建 postcss.config.js 并注册 tailwindcss2. 配置 tailwind…

24深圳杯B题42页高质量论文+可执行代码+可视化图标(更新版)

简单麦麦https://www.jdmm.cc/file/2710640/ 比赛题目的完整版思路代码数据都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff…

灌区信息化管理平台系统包含哪些内容?(全面介绍)

政策背景 2022年12月29日&#xff0c;水利部启动48处大中型灌区开展数字孪生灌区先行先试建设。 2023年2月24日&#xff0c;《2023年农村水利水电工作要点》:2023年农村水利水电工作的总体思路包括:紧盯保障国家粮食安全&#xff0c;加快推进大中型灌区现代化改造&#xff0c;…

1. AB路线-BFS+分层图

0AB路线 - 蓝桥云课 (lanqiao.cn) #include <bits/stdc.h> #define int long long #define endl \n using namespace std; int n,m,k; //存迷宫格子 char board[1005][1005]; //vis[i][j][k]存坐标(i,j)的格子&#xff0c;在一个周期中第k次经过它 bool vis[1005][1005][…