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

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

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

相关文章

传输文件协议FTP与LFTP

目录 一.简介 二. FTP基础 主动模式(Active Mode): 被动模式(Passive Mode): 三. Vsftp 服务器简介 四. Vsftpd配置 1. 安装vsftpd(ftp服务端) 2.编辑配置文件 (…

导航app为什么知道还有几秒变绿灯?

在使用地图导航app行驶至信号灯的交叉路口时,这些应用程序会贴心地告知用户距信号灯变化还有多少秒,无论是即将转为绿灯还是红灯。这一智能化提示不仅使得驾驶员能适时做好起步或刹车的准备,有效缓解了因等待时间不确定而产生的焦虑情绪&…

“Linux”的vi / vim目录编辑器

在前面中我们了解到Linux中的基础命令,20多个命令每个记住格式是:命令 选项 参数或者文件名,下面在了解一下最后两个命令:tree命令和find命令 一、补充的命令 (1)tree 作用:以竖状显示文件…

蓝鹏测控:扩大出口,勇拓海外市场

蓝鹏测控自2012年成立以来,始终专注于工业测量仪器的研发、生产与销售。公司坚持经验与创新并存,长期与华北电力大学、河北大学等多所知名院校深度合作,拥有一支技术力量雄厚的研发团队。经过多年的努力,蓝鹏测控已研发出多款具有…

数据库的存储过程、函数与触发器

使用下面的场景来引入 1.创建表 CREATE DATABASE staff; USE staff; CREATE TABLE employee(id INT NOT NULL AUTO_INCREMENT,userName VARCHAR(255),birthDate DATE,idCard VARCHAR(255),loginName VARCHAR(255),PASSWORD VARCHAR(255),mobile VARCHAR(255),email VARCHAR(2…

AI大模型日报#0514:OpenAI GPT-4o震撼发布、我是如何赢得GPT-4提示工程大赛冠军的

导读:欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。《AI大模型日报》今日要点:OpenAI在春季新品发布会上推出全能模型GPT-4o及桌面App,颠覆科技界。GPT-4o…

鸿蒙OS开发:【Stage模型应用程序包结构】

Stage模型应用程序包结构 为了让开发者能对应用程序包在不同阶段的形态更有清晰的认知,分别对开发态、编译态、发布态的应用程序结构展开介绍。 开发态包结构 在DevEco Studio上[创建一个项目工程],并尝试创建多个不同类型的Module。根据实际工程中的…

BUUCTF-Crypto 刷题记录

主要使用的在线解密工具:CTF在线工具http://www.hiencode.com/ 一眼就解密 题目: 下面的字符串解密后便能获得flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30 注意:得到的 flag 请包上 flag{} 提交 解题思路: base64…

深入学习Linux内核之v4l2驱动框架(一)

一,概述 V4L2(Video for Linux 2)是Linux操作系统中用于支持摄像头和视频设备的框架。它提供了一组API和驱动程序接口,用于在Linux系统中进行视频采集、视频流处理和视频播放等操作。 V4L2的设计目标是支持多种设备,…

关于配置深度学习虚拟环境(conda)的一些概念和常用命令

一、概念 下面介绍显卡驱动(例NVIDIA GeForce)、CUDA、cuDNN 的概念和联系。 显卡驱动 显卡驱动是封装成软件的程序,硬件厂商根据操作系统编写的配置文件。安装成功后成为操作系统中的一小块代码。它是硬件所对应的软件,计算机有…

记nrm管理仓库以及发布npm包

前言 记一次在公司创建私有库以及发布npm包,留下个脚印 一、nrm是什么? nrm是 npm 镜像源管理工具,用于快速地在不同的 npm 源之间切换。 二、使用步骤 1.全局安装nrm 代码如下(示例): npm install -…

GPIO输出速度(ARM-GD32)

单片机输出速度对GPIO硬件的影响 如果T为100ns 那么2/3*100ns 67ns 那么tr tf 38 ns (也就是不能超过32ns) tr 和tf和什么东西有关如何去控制 CL 是一个电容,电容会改变和影响电压变化的速率,输出高低电平也就是对电容进行充电…