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

news2024/11/16 19:50:45

目录

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=大小

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

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

相关文章

分享一些关于软件测试的面试问题

由于最近在面试软件测试工程师的岗位,遇到了一些面试的问题以及我的答案,希望对正在找工作的同行有些帮助,仅仅作为软件测试行业,求职者看问题就行,大佬可以探讨一下答案。 1.提交了bug,开发不认为是bug怎么…

JavaScript的综合案例

案例要求&#xff1a; 实现一个表单验证 1.当输入框失去焦点时&#xff0c;验证输入的内容是否符合要求 2.当点击注册按钮时&#xff0c;判断所有输入框的内容是否都符合要求&#xff0c;如果不符合要求阻止表单提交 简单的页面实现 <!DOCTYPE html> <html lang&…

凸优化理论学习三|凸优化问题(一)

系列文章目录 凸优化理论学习一|最优化及凸集的基本概念 凸优化理论学习二|凸函数及其相关概念 文章目录 系列文章目录一、优化问题&#xff08;一&#xff09;标准形式的优化问题&#xff08;二&#xff09;可行点和最优点&#xff08;三&#xff09;局部最优点&#xff08;四…

【万字面试题】Redis

文章目录 常见面试题布隆过滤器原理和数据结构&#xff1a;特点和应用场景&#xff1a;缺点和注意事项&#xff1a;在python中使用布隆过滤器 三种数据删除策略LRU (Least Recently Used)工作原理&#xff1a;应用场景&#xff1a; LFU (Least Frequently Used)工作原理&#x…

振弦式应变计的灵敏系数k范围探讨

振弦式应变计是一种广泛应用于工程结构健康监测的重要设备&#xff0c;其灵敏系数k是衡量其性能的关键指标。本文将探讨振弦式应变计的灵敏系数k的一般范围&#xff0c;并分析影响灵敏系数的因素。 一、振弦式应变计的工作原理 振弦式应变计通过测量振弦在受力作用下的振动频率…

屡被约谈的货拉拉三闯IPO,CEO周胜馥IPO前套现11亿

近日&#xff0c;货运巨头货拉拉第三次闯关IPO。虽然其实现首次年度盈利&#xff0c;但光鲜数据背后的盈利模式却频遭诟病。 货拉拉的创始人周胜馥从美国高校毕业后&#xff0c;曾供职于贝恩咨询公司&#xff0c;并在期间对创业产生了浓厚兴趣。抛开履历中的高学历好工作的部分…

Amesim基础篇-表格类型设置与读取

前言 在Amesim仿真中,不可避免需要应用到表格。如新能源动力电池中内阻、充电倍率的调取,压缩机的机械效率、容积效率等,水泵的效率,管路的压降等等。本文将介绍如何对表格类型的选择与参数输入。 1 进入表格设置界面 如下图所示,在Amesim界面的右上角Table Editor进入…

EEL中 python端的函数名是如何传递给js端的

python端的函数名是如何传递给js端的 核心步骤&#xff1a;将函数名列表注入到动态生成的 eel.js 中&#xff0c;这样前端一开始引用的eel.js本身已经包含有py_function的函数名列表了。你打开开发者工具看看浏览器中的 eel.js文件源代码就知道了。 具体实现&#xff1a; # 读…

使用 Flask Blueprint 实现模块化 Web 应用

文章目录 1. 什么是 Flask Blueprint&#xff1f;2. 为什么要使用 Flask Blueprint&#xff1f;3. 如何使用 Flask Blueprint&#xff1f;4. 在 Blueprint 之间进行通信5. 结合 Flask 插件系统进行功能拓展结语 当构建大型 Flask Web 应用时&#xff0c;保持代码的组织结构清晰…

etcd单机部署和集群部署

1、etcd单实例部署 对于平常的学习&#xff0c;其实搭建一个单机节点是够了的。接下来就讲讲怎么搭建单机节点。 本次部署是在 centos7 系统&#xff0c;cpu 为amd64 上面进行的。 部署是直接使用官方编译好的二进制文件&#xff0c;大家也可以直接看 ectd-releases 界面选择…

linux 环境下 分布式文件搭建fastDFS

1.软件信息 地址&#xff1a;happyfish100 (YuQing) GitHub 1.fastdfs-master.zip 2.fastdfs-nginx-module-master.zip 3.libfastcommon-master.zip 4.libserverframe-master.zip yum install make cmake gcc gcc-c perl 2.安装libfastcommon unzip libfastcommon-mast…

CPU利用率使用教程

本文主要参考&#xff1a; 一文让你学到 nmon最详尽的用法 Linux性能监控命令_nmon 安装与使用 如果你是在Ubuntu上安装nmon&#xff0c;使用&#xff1a; apt install nmon安装好后&#xff0c;直接运行 $:nmon #运行如果是后台抓数据&#xff1a; -f 参数: 生成文件,文件…

北京玻色量子携手赛氪网举办长三角高校数学建模竞赛巡回讲座

2024年5月13日下午&#xff0c;一场聚焦数学建模与量子计算前沿的讲座在中国计量大学隆重举行。此次讲座作为第四届长三角高校数学建模竞赛的巡回宣讲活动之一&#xff0c;由北京玻色量子科技有限公司与竞赛组委会成员赛氪网共同举办&#xff0c;旨在向广大师生介绍量子计算的应…

企业如何利用美国多IP服务器来提升网站的安全性?

企业如何利用美国多IP服务器来提升网站的安全性? 在当前网络环境下&#xff0c;网站安全性日益成为企业面临的重要挑战。为了有效应对各种潜在威胁&#xff0c;越来越多的企业选择利用美国多IP服务器来提升其网站的安全性。这种服务器配置能够通过一系列策略来增加网站的安全…

滚珠螺杆在精密机械设备中如何维持精度要求?

滚珠螺杆在精密设备领域中的运用非常之广泛&#xff0c;具有精度高、效率高的特点。为了确保滚珠螺杆在生产设备中能够发挥最佳性能&#xff0c;我们必须从多个维度进行深入考量&#xff0c;并采取针对性的措施&#xff0c;以确保其稳定、精准地服务于现代化生产的每一个环节。…

基于springboot的医护人员排班系统

springboot002基于springboot的医护人员排班系统 亲测完美运行带论文&#xff1a;获取源码&#xff0c;私信评论或者v:niliuapp 运行视频 包含的文件列表&#xff08;含论文&#xff09; 数据库脚本&#xff1a;db.sql论文&#xff1a;开题报告springboot002基于springboot…

nginx 发布静态资源

一. nginx 发布静态资源 在nginx中nginx.conf配置文件中添加内容如下&#xff1a; server {listen 90;server_name localhost;# 配置静态资源文件&#xff0c;就可以访问了location / {root /home/fooie-shop;index index.html;}# 配置音频和图片资源location /imoo…

Compose容器编排示例

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录如下&#xff1a; 一、从源代码开始构建、部署和管理应用程序 1.1、创建项目目录并准备应用程序的代码及其依赖 1.2、创建Dockerfile 1.3、在…

宝塔历史版本离线包下载(附详细教程)

宝塔离线版下载&#xff1a;宝塔离线版安装包 宝塔面板5.X版本升级最新版出错&#xff0c;导致宝塔面板无法使用&#xff0c;可以参考下离线包安装处理&#xff0c;这教程分享的是原理仅供有技术的人参考&#xff0c;小白也可以学习&#xff0c;进行操作前记得做好备份切记&am…

CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!

CodeGeeX是支持适配Visual Studio 2019的唯一一款国产智能辅助编程工具&#xff0c;已经在Visual Studio趋势上霸榜2周&#xff01; CodeGeeX v1.0.4版本上线Visual Studio插件市场&#xff0c;带来了多项新功能和性能优化&#xff0c;提升编程体验。 新功能亮点速览&#xf…