jvm深入研究文档--jvm分区以及职责

news2025/1/23 0:46:58

Java虚拟机(JVM)主要包括以下几个区域:

  1. 方法区(Method Area):这个区域存储已被加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。方法区是所有线程共享的。在Java 8之前,方法区是永久代(PermGen),从Java 8开始,永久代被元空间(Metaspace)替代。
  2. 堆区(Heap):这是Java内存中最大的一块区域,被所有线程共享,用于存放对象实例。JVM在JDK 1.7之前,使用的是分代收集(Generational Collection),包括新生代(Young Generation)和老年代(Old Generation)。在JDK 1.8之后,引入了Eden Space, Survivor Space和Old Generation的概念。
  3. 栈区(Stack):每个线程在创建时都会创建一个虚拟机栈,每一个方法执行的时候都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
  4. 程序计数器(Program Counter Register):这个区域可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。
  5. 本地方法栈(Native Method Stack):与虚拟机栈所发挥的作用非常相似,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。

每个JVM分区在不同版本的Java中都可能有所变更,特别是在每次大版本更新时,例如Java 8、Java 11和Java 17中都进行了一些重要的变更。

方法区(Method Area)

方法区(Method Area)是Java虚拟机(JVM)中的一部分,它与Java堆一样,是各个线程共享的内存区域。在JVM启动时方法区被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的。方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展。

虽然方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。因此,方法区可以看作是一块独立于Java堆的内存空间。

此外,方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误。

堆区(Heap)

堆区是Java虚拟机(JVM)中的主要部分,也是垃圾收集的主要区域。它主要用于存放对象实例以及大多数Java对象(如数组,用户定义的类等)。

在Java堆中,对象的内存分配和回收是主要发生的地方。当你创建一个新的对象实例时,JVM会在堆上为其分配内存。当对象不再被引用时,垃圾收集器会回收其占用的内存。

Java堆是所有线程共享的,因此它是一个并发区域,也就是说在任何时刻,多个线程可能同时对同一个对象进行操作。

Java堆是垃圾收集的主要区域,这意味着垃圾收集器可以自动回收不再被引用的对象占用的内存。这极大地减少了内存泄漏的可能性,因为JVM会自动管理内存,避免内存泄漏。

栈区(Stack)

栈区是Java虚拟机(JVM)中的另一个重要部分,与堆区不同的是,栈区只属于某一个特定的线程,是线程私有的。每个线程都会有一个对应的栈,它的生命周期与线程的生命周期一致。

栈区主要用于执行Java方法,每一个方法的执行都会创建一个栈帧,用于存储局部变量、操作数栈以及动态链接和方法出口等信息。当一个方法执行完成后,对应的栈帧就会被弹出,所占用的内存会被释放。

栈区的容量也是有限制的,如果程序中创建了大量的栈帧并且没有被及时回收,那么就会出现栈溢出的情况,这时候程序会抛出一个StackOverflowError错误。在Java中,可以通过-Xss参数来设置每个线程的栈大小。

程序计数器(Program Counter Register)

程序计数器(Program Counter Register)是计算机处理器中的一种特殊寄存器。它的主要功能是跟踪并存储当前正在执行的指令在内存中的地址。

在计算机的执行过程中,程序计数器会根据指令的执行顺序进行更新。每执行一条指令,程序计数器就会增加,指向下一条要执行的指令。当遇到跳转指令(如JMP,CALL等)时,程序计数器会直接跳转到指定的地址,改变当前执行顺序。

程序计数器通常被视为CPU的“眼睛”,它知道下一步应该执行哪条指令,是CPU执行流程的关键部分。

PC寄存器是线程私有的,每一个线程都有一个独立的PC寄存器。它的生命周期和线程保持一致,随着线程的创建和销毁而存在。

在JVM中,PC寄存器也是线程私有的,它用来存储JVM字节码指令的地址。JVM的字节码解释器通过改变PC寄存器的值来明确下一条要执行的字节码指令。

PC寄存器的设定是为了能够准确的记录各个线程正在执行的当前字节码指令地址,以便CPU在需要在线程之间切换时,可以快速准确地找到下一条要执行的指令。

本地方法栈(Native Method Stack)

本地方法栈(Native Method Stack)是Java虚拟机(JVM)中的一部分,与Java堆和栈区一起构成了Java运行时环境。

本地方法栈和Java栈一样,都是线程私有的,它用于支持native方法的执行。在Java中,如果一个方法使用了native修饰符,那么这个方法就会在本地方法栈中执行。

本地方法栈和Java栈的主要区别在于,本地方法栈中的方法可以执行操作系统级别的调用,例如访问文件系统、网络资源等。因此,本地方法栈具有更高的灵活性和更大的风险,因为它可以直接访问物理资源。

本地方法栈的管理和垃圾收集方式与Java堆和栈区不同,它的回收和内存管理需要更复杂的技术来实现。如果本地方法栈中的内存泄漏或者溢出,会对整个JVM的性能产生影响。

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

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

相关文章

C. Card Game

题目:样例: 输入 4 4 -4 1 -3 5 4 1 -2 3 -4 3 -1 3 -5 1 -1输出 5 4 2 0 思路: 这里的题意就是, 当我们 i 取奇数的时候,可以获得该奇数 i 的值,并去掉当前卡牌。 当我们 i 取偶数的时候,去掉当…

钢轨长度及允许偏差

声明 本文是学习GB-T 2585-2021 铁路用热轧钢轨. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了铁路用钢轨的订货内容、分类、尺寸、外形、质量及允许偏差、技术要求、试验方法、检 验规则、标志及质量证明书。 本标准适用于3…

【斯坦福cs324w】中译版 大模型学习笔记九 大模型之Adaptation

文章目录 引言Adaptation的必要性从llm的训练过程分析从下游任务和原始训练任务之间的差异分析 通用的Adaptation配置 当前主流的Adaptation方法ProbingFine-tuningLightweight Fine-tuningPrompt TuningPrefix TuningAdapter Tuning 参考资料 在特定领域的下游任务中&#xff…

【Git】轻松学会 Git(一):掌握 Git 的基本操作

文章目录 前言一、创建 Git 本地仓库1.1 什么是仓库1.2 创建本地仓库1.3 .git 目录结构 二、配置 Git三、认识 Git 的工作区、暂存区和版本库3.1 什么是 Git 的工作区、暂存区和版本库3.2 工作区、暂存区和版本库之间的关系 四、添加文件4.1 添加文件到暂存区和版本库中的命令4…

面试官:Redis基本命令有哪些,Redis怎么实现分布式锁?

哈喽!大家好,我是奇哥,一位专门给面试官添堵的职业面试员 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 文章目录 一、Redis基本数据类型与使用场景1、S…

IP地址定位的特点

IP地址定位是一种广泛应用于网络领域的技术,它允许我们确定特定设备或用户在互联网上的位置。这项技术在很多方面都具有重要的特点,本文将深入探讨这些特点。 1.全球性覆盖: IP地址定位IP66_ip归属地在线查询_免费ip查询_ip精准定位平台具有全…

macOS Sonoma 14 正式版(23A344)发布,附黑/白苹果镜像下载地址

系统介绍(系统下载地址:http://www.imacosx.cn/115300.html) 黑果魏叔9 月 27日消息,苹果今日向 Mac 电脑用户推送了 macOS Sonoma 14 正式版(23A344)。 macOS 14正式版系统发布:全新功能与改…

Linux:理解进程的多种状态

文章目录 理解状态运行状态阻塞状态挂起状态Linux系统下的进程状态的解析状态的查看 本篇总结的是进程的多种状态 对于进程的状态理解,在教材上通常是有下面的思维模式图 那么如何理解上面图片中的内容? 理解状态 如何理解状态?其实理解状…

什么是HTTP头部(HTTP headers)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 理解 HTTP 头部(HTTP Headers)⭐ HTTP 头部的分类⭐ HTTP 头部的应用⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦&#x…

基于Python Django的公务员考试信息管理系统

文章目录 1 简介2. 技术栈3 功能分析4 功能具体设计4.1 软件功能模块设计4.2数据库设计与实现4.2.1概念模型设计4.2.2数据库逻辑结构设计 5系统详细设计5.1系统功能模块5.2管理员功能模块 六 源码咨询 1 简介 公务员考试信息管理系统的开发运用Python技术,MIS的总体…

8月数据出炉!NOA与激光雷达「分道扬镳」?降本大战升级

对于激光雷达赛道来说,如何在市场整体需求更加偏向强调性价比的背景下,继续维持前装出货的增速,已经成为新的考验。 进入2023年,高阶智驾(中国市场以NOA为代表),继续保持向上势头。8月&#xff…

Archlinux Timeshift的系统备份与还原

服务器在滚挂或误删系统文件,timeshift系统备份与还原的情景: 安装 timeshif 1 yay -s timeshif 备份设置 选择快照类型 此处选择【RSYNC】 选择储存位置 每台设备安装分区不一样,大家安装实际情况选择,一般选择比较大的空间存储,并且最好是机械,这样不容易损坏 设置计…

实战项目:VB实现小鸟快跑小游戏

文章目录: 一:效果演示 二:实现思路 三:代码实现 form1 效果图 代码 form2 效果图 代码 一:效果演示 效果图◕‿◕✌✌✌ 代码下载 二:实现思路 窗口1 就是实现窗口的跳转和关闭窗口2 1.先添加背…

【接口测试】Chrome浏览器F12调试工具抓包详细分析(超细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 调试时使用最多的…

Docker网络+资源控制

一、Docker网络 Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。…

【计算机网络】IP数据报首部格式、最大传输单元MTU、最大分段大小MSS

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多计算机网络知识专栏&#xff1a;计算机网络&#x1f525; 给大家跳段…

【生育险报销】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

计算机视觉与深度学习-图像分割-视觉识别任务03-实例分割-【北邮鲁鹏】

目录 参考定义Mark R-CNN结构思路Mask R-CNN训练阶段使用的Mask样例Mask R-CNN实例分割结果Mask R-CNN检测姿态 参考 论文题目&#xff1a;Mask R-CNN 论文链接&#xff1a;论文下载 论文代码&#xff1a;Facebook代码链接&#xff1b;Tensorflow版本代码链接&#xff1b; K…

51单片机3【单片机的种类】

1.51单片机发展史 1. 发展史 &#xff08;1&#xff09;总结&#xff1a;早期是不分单片机和其他CPU的&#xff0c;早期都是一起的&#xff0c;后来应用级别的高端CPU相继推出用于别的行业&#xff08;PC&#xff0c;手机&#xff09;其中一支专用与低性能&#xff0c;低价格作…

Java基础简单整理

文章目录 Java语言具有以下特点&#xff1a;Java SE vs Java EEJVM vs JDK vs JRE为什么说 Java 语言编译与解释并存&#xff1f;Java 和 C 的区别?Java注释用法&#xff1a;Java标识符Java基本数据类型链接Java字符串类型链接基本类型和包装类型的区别&#xff1f;静态方法为…