数据区的内存空间

面试回答,JVM内存模型/内存空间:运行时数据区 发布于个人公众号,打开微信,搜索MelodyJerry即可 本文由作者原文 [JVM|内存模型] Java虚拟机的内存模型?也就这7个而已 修改而来,可点击左下角阅读原文。 JVM内存模型/内存空间 Java虚拟机JVM运行起来,就会给内存划分空间,这块空间成为运行时数据区。 运行时数据区主要划分为以下 6个 : ① 程序计数器 (Program Counter Register) 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器 线程私有的内存 值得注意的是:《Java虚拟机. 阅读详情

1、数据的生命周期

数据存放于哪个空间,其实本质上我们探讨的是该数据他的“房子”, 当该房子被回收之后,那么该数据的生命也到了尽头。

2、数据的作用范围

数据的生命周期又和作用范围相绑定(不起作用了,生命也该结束了),作用范围可以分为以下几种:

  • 局部变量: 函数内部定义且没有使用static修饰的变量,以及函数的入参,他们的作用范围是所在函数。
  • 全局变量:一般是指在函数外定义的变量以及函数内使用static修饰的变量, 他们的作用范围是在整个程序运行期间。
  • 动态申请数据:主要指程序员使用malloc 起始, free进行结束的变量

3、[作用范围]与[存放空间]的关系

  • 局部变量:存放于栈区
  • 全局变量:存放于静态存储区, 该空间大小在程序编译时就已经确定了。
  • 动态申请数据:存放于堆空间,使用malloc分配后,一定要及时free,避免程序最终堆空间不够而程序崩溃。另外,要避免频繁申请,会导致许多的内存碎片,而无法分配大块的堆空间。 如果频繁使用,可以考虑用全局变量代替。

4、ram

上面说的这些数据都是在程序期间他是可以改变的,可以随机访问和修改, 都存放于ram中。
ram 又可以分为静态ram ( sram )和动态ram (dram)。
静态ram主要存放全局变量,因为这个生命周期长,如果放在动态ram里面,他是需要不断刷新电荷的,那么不得累死。
动态ram主要存放局部变量和动态申请数据,这些数据的生命周期会短一些。

静态ram又分.bss段和.data段。
.bss段放未初始化和初始化为0的全局变量。
.data段放初始化为非0的全局变量。

在这里插入图片描述

第 3 章 一 运行时数据区概述及线程、线程独有(程序计数器、Java栈、本地方法栈)、线程共享(堆, 方法区) 第 3 章 运行时数据区概述及线程 1、前言 本文主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区 也就是大厨做饭,我们把大厨后面的东西 (切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品 (执行引擎使用到运行时数据区的 阅读详情

相关推荐

第三章:缘尽-运行时数据区概述及线程

文章目录第 3 章 运行时数据区概述及线程1、前言2、运行时数据区结构2.1、运行时数据区与内存2.2、线程的内存空间3、线程3.1、JVM 线程3.2、JVM 系统线程 第 3 章 运行时数据区概述及线程 1、前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区 也就是大厨做

程序员小刘 3157

RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储

分析程序的代码段,常量区,静态数据区,栈,堆是什么。他们和ROM,RAM的关系。以及断电和通电状态下数据的存储差异

在嵌入式嵌入式领域奋斗的程序猿的博客 5938

手把手教你利用qemu搭建银河麒麟V11 arm环境

在Windows环境下,初学者或企业用户常通过VMware、VirtualBox等虚拟机软件安装Ubuntu、Red Hat等Linux系统,这类工具更侧重X86等复杂指令集架构(CISC,常见于Intel、AMD处理器)的虚拟化。而QEMU是一款开源的虚拟机监视器与模拟器,核心优势在于可模拟ARM、MIPS、RISC-V等精简指令集架构(RISC)的处理器并提供虚拟化能力,更适合对虚拟化技术有一定了解的用户。可能是电脑性能问题,安装过程比较慢,需要耐心等待。等操作系统下载完成后,进行安装了。

huanhuanzhou blog 2455

STM32中栈、堆、全局区、常量区、代码区、RAM、ROM的分析

STM32中堆栈是为了存储不同信息而开辟的空间,具体对应于启动文件中的head和stack所定义的内存空间。STM32中,堆向高地址增长,栈向低地址增长。堆:是用户调用malloc时申请的内存空间。栈:临时创建的局部变量(一般的局部变量+const修饰的局部变量),函数入口参数,函数返回值存放在栈区。

Z523588的博客 4019

从零构建基于ZYNQ与AD9361的SDR信号源:FPGA逻辑与射频前端的协同设计

本文详细介绍了从零开始构建基于ZYNQ与AD9361的SDR信号源的完整流程。通过解析FPGA逻辑与射频前端的协同设计,重点阐述了如何利用FPGA生成基带信号,并通过ARM处理器配置AD9361,最终实现一个可编程的2.4GHz载波信号发生器。内容涵盖硬件选型、Vivado环境搭建、AXI总线通信、LVDS接口设计及软件驱动开发,为SDR开发者提供了实用的实战指南。

weixin_29200485的博客 214

WOL唤醒配置(以太网、PHY、MAC)

MAC 就是以太网控制器,属于OSI的数字链路层。phy 属于OSI的物理层(Physical layer),所以叫phy。CPU Mac与phy通信通过MII接口,数据的传输通过MDIO数据线。通过配置phy的相关寄存器实现不同的功能。

qq_58264156的博客 8629

单片机的内存分配(变量的存储位置)详解

变量的存储位置

qq_38636482的博客 4368

Carla学习笔记(一)服务器跑carla本地显示窗口

其中host后替换为你的服务器IP,-carla-rpc-port和-p后为端口号,需要一致。python3 manual_control.py也可以替换为其他python脚本。因为电脑配置不够,所以在服务器跑carla,本地运行PythonAPI里的样例。把carla仓库的PythonAPI拷贝到本地,或者直接去官方里下载一下。

做题记录 4977

2021-03-24

堆区、栈区、全局区(静态区)、常量区、代码区在ROM和RAM中的分布 (1)RAM从高地址到低地址分为:栈区、堆区、全局区(也称静态区,包括.bss和.data段) 一、栈区。栈一般存放局部变量和函数参数,从RAM的高地址,向下生长 •临时创建的局部变量存放在栈区。 •函数调用时,其入口参数存放在栈区。 •函数返回时,其返回值存放在栈区。 •const定义的局部变量存放在栈区。 这一部分的存储空间是编译器在编译代码的时候就分配好点的固定存储空间。在裸机系统中,这栈的大小由启动文件里面的代码配置。 二、堆

weixin_40791207的博客 873

华为昇腾NPU环境搭建:torch-npu安装避坑指南(附常见错误解决方案)

本文详细解析了在华为昇腾NPU环境中安装torch-npu适配包的全流程与核心要点。从基础环境准备、严格的版本匹配策略,到针对‘RuntimeError: NPU error’、‘ImportError: libxxx.so’等高频错误的深度解析与解决方案,提供了一份实用的避坑指南,旨在帮助开发者高效搭建稳定的PyTorch开发环境。

weixin_29094979的博客 410

手把手教你用STM32驱动SPL06-001气压传感器(附完整代码与避坑指南)

本文详细介绍了如何使用STM32驱动SPL06-001气压传感器,包括硬件连接、寄存器配置、驱动层实现和数据补偿算法。通过完整的代码示例和避坑指南,帮助开发者快速掌握SPL06传感器的应用技巧,提升嵌入式系统开发效率。

weixin_42552315的博客 292

单片机全局变量和局部变量的使用 .

全局变量是存在RAM中的,而局部变量是存在堆栈中的 全局变量是从低地址往高地址存,局部变量是从RAM的高地址往低地址存,如果你定义的变量太多就有可能是溢出了。在MSP430中,局部变量如果不多,就会分配r4-r15的寄存器,如果数量大就会用压栈处理。 全局变量是使用相同的内存块在整个类中存储一个值. 全局变量的存在主要有以下一些原因: 1,使用全局变量会占用更多的内存(因为其生命期长),不过在计算

chinseeker 2280

【K8S系列】在 Kubernetes 中使用 Prometheus 进行监控的详细指南

Prometheus 是一个开源的监控和报警工具,广泛用于 Kubernetes 环境中。本文将深入探讨如何通过 Kubernetes 中的注解配置 Prometheus 的抓取设置,以高效监控服务,并确保系统的可靠性和可维护性。

颜淡慕潇 2万+

进程内存空间五种 数据区

另外,我们可以看一下: 堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减) 栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括stati...

mulinsen77的博客 3545

基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】

基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】---来自一位即将入学的准研一,也希望这篇文章能够激励自己不断走下去!!

qq_46044325的博客 4442

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IOS 内存空间堆 栈 全局区 代码区 数据区

面试经常会问道的一道题。一般课程中介绍的都比较笼统,下面看一下简单的划分其实培训课程中,这样简单的划分是有问题的。下面我们一起来看一下真正的内存区域,以及每个区域的重点。1.栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯一的。优点是快速高效,缺点时有限制,数据不灵活。[先进后出]栈空间分静态分配 和动态分配两种。 这里会经常问到aut...

lee727n的博客 1715

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

运行时数据区

目录二、运行时数据区1、运行时数据区结构1.1 内存与运行时数据区1.2 线程的内存空间2、线程2.1 线程2.2 JVM 系统线程 二、运行时数据区 1、运行时数据区结构 1.1 内存与运行时数据区 内存 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。 不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布

FlyingPenguin的博客 203

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux系统编程——从内存空间看fork创建进程后到底发生了什么

fork()是一个系统调用,它的作用是在调用它的进程(父进程)中创建一个几乎完全相同的新进程(子进程)。在fork()调用之后,父进程和子进程会继续执行相同的代码,返回值不同:fork()返回子进程的进程 ID(PID)。fork()返回 0。fork()调用后,父子进程的代码和数据(如全局变量、堆、栈等)会被复制到子进程中,但它们是独立的,可以分别修改。在fork()调用后,父进程和子进程拥有几乎相同的内存空间,但它们的内存是独立的,采用写时复制(COW)技术来减少内存复制的开销。

weixin_45720999的博客 1509

Linux 进程内存空间分为那几段?作用分别是什么

Linux的内存空间简单可以分为5个部分:     Text(代码区):存放可执行的指令操作,其只读不能写     Bss(静态区or全局区):存放未初始化的全局变量和静态变量     Data(数据区):存放初始化的全局变量和静态变量     Stack:存放临时变量,函数参数等     Heap:存放new/malloc等动态申请的变量,用户必须手动进行delete/free操作。 ...

chenxinntu的博客 2352

运行时数据区概述及线程

1.前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们的运行时数据区 比如大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西制作成精美的菜品 2.运行时数据区结构 2.1 运行时数据区与内存..

花&败 138

JVM学习笔记 - 第三章 运行时数据区概述及线程

目录1. 运行时数据区结构1.1 运行时数据区描述1.2 运行时数据区与内存1.3 线程的内存空间2. 线程2.1 JVM线程2.2 JVM系统线程 1. 运行时数据区结构 1.1 运行时数据区描述

weixin_44857327的博客 308

C/C++程序内存空间问题(面试必备)

关于程序内存空间的分类及说明。

you_are_my_lucky的博客 1761

《Java虚拟机原理图解》之:JVM运行时数据区

JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算机内存空间的划分和分配。 本文将通过以下几个话题来讨论JVM运行时数据区。 Topic 1. JVM运行时数据区里有什么? Topic 2. 虚拟机栈 是什么?虚拟机栈里有什么? Topic3.栈帧是什么?栈帧里有什么? Topic 4. 方法区是什么?方法区里有什么? Topic ...

Java Punk 572

jvm-第三章:运行时数据区及线程概述

1、前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区 也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品 2、运行时数据区结构 2.1、运行时数据区与内存 内存 内存是非常重要的

u014692224的博客 141

内存空间分配和各种常量与变量

还是要写博客。 今天复习了很多东西。做个简要总结。当然说的都是4G运行内存,32位机下。 空间分配,高地址到低地址依次为:内核,栈,堆,未被初始化的数据区,初始化的数据区,常量区,代码段。 内核,不用讲了。 栈:由高地址往低地址生长。函数调用时操作系统会在栈上开辟空间,是连续的一段空间,大约有2M左右。当函数调用结束时,操作系统会收回开辟的那段空间。栈溢出指的是这2M空间都被占用了,当再有函数被调...

amao_ios_Allen的博客 745

JVM学习笔记二:运行时数据区概述及JVM线程

运行时数据区是JVM非常重要的组成部分,这一篇主要介绍运行时数据区各个区域的划分,以及JVM中的线程。JVM各区域划分学习JVM,必须牢记下图各个区域的分类,这很重要。注意,上图的元数据区在JDK8以前常被称作“永久代”,本质上两者并不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分代收集至方法区,或者说用永久代来实现方法区而已。这样HotSpot的垃圾收集器可以像管理Java堆一样管理这部分内存,能省去专门为方法区编写内存管理代码的工作。

一条咸鱼的博客 591
上一篇: cpu架构
下一篇: linux系统组成
给点sun,就shine
博客等级 码龄10年 148粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值