JVM面试(二)内存区域划分

news2024/9/22 1:09:34

内存区划分

Java虚拟机在执行Java程序的过程中会把它锁管理的内存划分为若干个不同的数据区域。 这些区域有各自不同的用途,以及创建和销毁的时间。 有的区域随着虚拟机的进程一直存在,有的区域依赖用户线程的启动和结束而建立和销毁。

根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存,包含一下几个运行时的数据区域。如图:

在这里插入图片描述

一般我们面试的时候,都是笼统的说:堆、栈、以及方法区,JDK 8之后方法区变为“元空间”。
这个说法不错,下面我们详解一下。

程序计数器

程序计数器区域⼀块内存较小的区域,它⽤于存储线程的每个执行指令,每个线程都有自己的程序计数器,此区域不会有内存溢出的情况。
由于Java虚拟机的多线程是通过线程的轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只执行一个线程。
那么为了每次切换线程后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器, 所以这个程序计数器区域,是一个线程私有的内存。

虚拟机栈与本地线程栈

在很多情况下,我们都是把这两个合在一起说的。
两方面的原因,一个是《Java虚拟机规范》对本地方法栈使用的语言、使用方式等没有任何规定。 二是有些虚拟机确实把这两个合二为一,比如Hot-Spot虚拟机。

如果按照我这里的浅显理解的话,他们之间的区别可以这么说。
虚拟机栈的生命周期与线程相同,主要就是存储线程执行相关的局部变量信息。
本地方法栈也是如此,但是所执行的内容可能是虚拟机本地方法Native。

所以我们在面试的时候,可以只说虚拟机栈,甚至直说本地方法栈都可以。(在我面试数十次的经历中,确实没有遇到,挑这两个问区别的)

回到虚拟机栈,在每个方法被执行的时候,Java虚拟机都会在这个线程栈中创建一个“栈帧”,用于存储局部变量表,操作数栈,方法出口等等信息。每一个方法被调用,直到执行完毕,就对应着一个栈帧从入栈到出栈的过程。

因为我们线程调用方法是一层层递进的,所以这个栈帧也是一层层叠加。当调用深度超过虚拟机所允许的深度时,就会抛出StackOverflowError异常。

还有一个情况是,栈帧层层递进的时候,虚拟机栈也是在不断增大。
如果栈的内存不足,并且提前分配好不能扩展;或者是扩展的时候无法申请到足够的内存,就会发生OutOfMemoryError异常。

堆区

堆区是各个线程共享的区域。
这也是老生常谈的问题,主要存放JVM启动时创建的数组和对象实例,还有垃圾回收也主要在堆区发生,还有分代模型等等巴拉巴拉。
具体内容我们可以到分析垃圾回收的时候详细说下。
需要注意的是,堆区也是可以被固定大小的,当内存不足无法扩展时,也会抛出OutOfMemoryError异常。

方法区

与堆区一样,也是各个线程共享的区域。
主要存储那些常亮,静态变量,代码缓存等数据。虽然《Java虚拟机规范》中把方法区描述为一个堆区的逻辑部分,但是名字却为“Non-Heap” 非堆,这就是要与堆区做区分。

这里不得不提一下“永久代” 这个概念,以前很多时候都是把永久代与方法区混为一谈。
这是因为HotSpot虚拟机的设计团队把垃圾收集器的分代设计扩展到了方法区,把方法区称为永久代来管理垃圾回收机制。

但是后来又把永久代的概念放到了本地内存中,一直到JDK8 之后,完全放弃了永久代的概念,改为在本地内存新实现的“元空间”来代替

粗略来说,就是最早时候方法区=永久代,后来统一并入本地内存的“元空间”中。

运行时常量池

也是方法区的一部分,主要 存储Class文件中编译期生成的各种字面量与符号引用

字面量是源代码中的固定值的表示法,即通过字面我们就能知道其值的含义。字面量包括整数、浮点数和字符串字面量;

符号引用包括类符号引用、字段符号引用、方法符号引用和接口方法符号引用。符号引用就是⼀个字符串,只要我们在代码中引用了⼀个非字面量的东西,不管它是变量还是常量,它都只是由⼀个字符串定义的符号,这个字符串存在常量池里,类加载的时候第一次加载到这个符号时,就会将这个符号引用(字符串)解析成直接引用(指针)。

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

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

相关文章

YOLOv8 训练15种动物分类模型

1. 下载数据集 https://hyper.ai/datasets/31084 2. 进行训练 这里数据集没做拆分,训练测试都是同一个数据集。 train.py:python from ultralytics import YOLO from ultralytics.utils import DEFAULT_CFG from datetime import datetimecurrent_time datetim…

2.1CPU内部结构

🎓 微机原理考点专栏(通篇免费) 欢迎来到我的微机原理专栏!我将帮助你在最短时间内掌握微机原理的核心内容,为你的考研或期末考试保驾护航。 为什么选择我的视频? 全程考点讲解:每一节视频都…

利用深度学习实现验证码识别-3-ResNet18

在当今数字化时代,验证码作为一种重要的安全验证手段,广泛应用于各种网络场景。然而,传统的验证码识别方法往往效率低下,准确率不高。今天,我们将介绍一种基于 ResNet18 的验证码识别方法,它能够高效、准确…

AI大模型优化技巧:参数高效微调(PEFT)与LoRA微调深度解析

1. Fine-tuning 相较于基础大模型动辄万卡的代价,微调可能是普通个人或者企业少数能够接受的后训练大模型(post-training)的方式。 微调是指在一个预训练模型(pre-training)的基础上,通过少量的数据和计算资源,对模型进行进一步训练&#x…

阿里巴巴数学竞赛成绩未公布:背后的权衡与期待

文 | 头部财经首席评论员白立新 发布 | 头部财经 top168.com 导语:2024 年阿里巴巴数学竞赛成绩迟未公布,引发广泛猜测。中专生姜萍的表现备受瞩目,达摩院陷入两难困境。这场竞赛结果的公布,关乎多方利益与社会影响,…

UML(ER) manual book

图形与符号 实体 真实世界的表示(实物),负责数据的发送或者接收,通常使用矩形表示。 处理和加工 通常使用圆圈表示数据时如何被处理,比如下订单,付款等动作。 数据存储 通常使用两条平行线表示&…

碲化镉太阳能电池:绿色能源的新星,高效转换引领未来

随着全球对清洁能源需求的持续增长和技术的不断进步,碲化镉太阳能电池必将在未来的能源市场中占据重要地位。‌‌PicoQuant公司一直致力于碲化镉太阳能电池新材料、‌新工艺的探索与研发,充分利用其在时间分辨技术上的优势,‌为碲化镉太阳能电…

5、LVGL控件-滑轮、滑动条、圆弧

本篇文章目录导航 ♠♠ LVGL控件-滑轮、滑动条、圆弧 ♣♣♣♣ 一、LVGL 滑轮部件 ♦♦♦♦♦♦♦♦ 1.1 滑轮部件组成部分 ♦♦♦♦♦♦♦♦ 1.2 滑轮部件基本API ♦♦♦♦♦♦♦♦ 1.3 实验小演示 ♣♣♣♣ 二、LVGL 滑动条部件 ♦♦♦♦♦♦♦♦ 2.1 滑动条部件组成部分 ♦…

论文阅读:MambaVision: A Hybrid Mamba-Transformer Vision Backbone

论文地址:arxiv 摘要 作者提出了一种新型的混合 Mamba-Transformer 主干网络。通过重新设计 Mamba 公式,增强了其高效建模视觉特征的能力。 此外,作者还通过对 ViT 与 Mamba 消融研究,实验结果表明了:在最后几层为 …

“双碳”减排背景下企业自发电系统该具备哪些功能?

随着全球能源危机加剧、用能需求上升以及新能源技术的迅速发展,新能源发电的应用范围不断扩大,并逐步形成了新型能源与电力市场。然而,由于新能源的能量密度普遍较低,进行大规模发电时需精心挑选适合的位置,因此新能源…

【网络安全】服务基础第一阶段——第九节:Windows系统管理基础---- Windows_AD域

目录 一、域与活动目录 1.1 工作组 1.2 域 1.2.1 域(Domain) 1.2.2 域控制器(Domain Controller,DC) 1.2.3 功能和角色 1.2.4 管理和监控 1.2 5 域结构 1.3 组织单元(Organizational Unit&#xff…

Seata 的4种事务模式(XA、AT、TCC、SAGA)

目录 前言 Seata架构 事务模式 XA AT TCC 区别 前言 在分布式系统中,实现一个功能可能需要由几个不同的服务来共同实现。这就会带来一个问题,不同的服务之间无法做到使用同一个事务,这就无法保证数据的一致性了。在一些对数据一致性要…

基于SSM的“基于决策树算法的大学生就业预测系统”的设计与实现(源码+数据库+文档)

基于SSM的“基于决策树算法的大学生就业预测系统”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统用户用例图 学校基础信息管理 毕业生基…

Java设计模式之装饰器模式详细讲解和案例示范

1. 引言 装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许向现有对象添加新的功能,而无需修改其结构。这种模式通过使用组合而非继承来扩展对象的行为,在许多实际应用中极为常见。本文将详细介绍装饰器模式…

世界复合医学杂志社世界复合医学编辑部2024年第4期目录

论著 苏子降气汤联合三子养亲汤治疗痰浊壅肺型慢性阻塞性肺疾病急性加重期的临床疗效 周芹;周磊; 1-437 天麻钩藤汤加减联合依那普利叶酸片对原发性高血压患者血压水平与中医证候积分的影响 邹文博;王世雄; 5-8 伏诺拉生联合康复新液治疗反流性食管炎的临床研究 孙…

山体滑坡监测预警系统—百科分享

GNSS山体滑坡监测预警系统是一种利用全球导航卫星系统(GNSS)技术,对易发生山体滑坡的地段进行24小时不间断监测的先进系统。该系统能够实时记录易滑坡地段山体的各种变化情况,为灾害预警和防治提供科学依据。 GNSS山体滑坡监测预警系统通过在地表关键位置…

05-最新PyCharm安装详细教程及pycharm配置

一、PyCharm简介及其下载网站 PyCharm是由JetBrains打造的一款Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。PyCharm提供了代码编辑、调试、语…

700道学生百科知识题库ACCESS\EXCEL数据库

今天这个题库虽然记录数不多,但是题目很经典、精彩、精华,分7个难度级别,每个级别100题;分类也很多,包含:百科、常识、地理、动画、国学、化学、历史、旅游、美食、诗词、数学、体育、天文、文学、物理、星…

如何选择合适的同轴连接器?关键性能指标全解析

同轴连接器是用于连接同轴电缆或同轴传输线与其他电子设备或另一段同轴电缆的一种装置。它们在射频(RF)和微波通信系统中非常常见,因为它们能有效减少信号损耗并提供良好的屏蔽,以防止电磁干扰(EMI)。 基本…

执行标准应该公开吗?

在当今社会,标准的重要性日益凸显。执行标准,如同商业世界和公共生活中的指南针,为产品质量、服务水平以及各类活动划定了清晰的界限。那么,执行标准应该公开吗?这是一个值得我们深入探讨的关键问题。 一、对于国家标…