《数据结构》之栈和堆结构及JVM简析

news2024/11/28 16:45:38

导言:

在数据结构中,我们第一了解到了栈或堆栈,它的结构特点是什么呢?先进后出,它的特点有什么用呢?我们在哪里可以使用到栈结构,栈结构那么简单,使用这么久了为什么不用其它结构替代?

一.程序在内存中的分布

作为一个程序猿,我们应该会常常跟代码打交道,那么我们所编写的程序或代码,是怎么跑起来的,操作系统怎么调用的,怎么划分的我们可以使用一个简单的图来了解一下:

在图片中,把我们的内存一共分为了两个部分,一个是操作系统的内核区,另外一个就是用户区

对于操作系统: 操作系统(英语:Operating System,缩写:OS)是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

操作系统内核要负责:程序调用,驱动调用,内存管理和分配,有兴趣可以学学操作系统,我们这里主要是看看用户内存区

用户内存区主要是用户对计算机发出的指令,计算机要做出相应的操作,用户区也是我们最大化操作计算机的地方,启动一个APP,打开网站,鼠标单击,Linux中的一次 dir指令等等,都是我们人,用户在进行操作和管理

我们写的程序或代码也是运行在用户空间上的

程序在用户空间上加载出来六个部分:

  • 代码段
  • 只读数据段
  • 初始化数据段
  • 未初始化数据段
  • heap堆
  • stack栈

代码段:就是我们写的源生的一些语言指令,在操作系统也可以叫做临界区,他在运行是不可改变的,又是纯的

只读数据段:就是我们在程序中写的一些常量,比如c或Java中使用const修饰的变量,它们是全局唯一且不可变的,包括语言本省有一些自定义的宏都是不可变的

初始化和未初始化的数据段:都是一些申请的全局变量,有些是未初始化的,有些是初始化的,在程序运行的时候就会被调用,都是数据段范围

heap堆:这就是我们的重点了,它的作用是动态申请空间的程序存放的地方,比如Java中我们new了一个对象,对象都存放在堆中的,还有c语言中malloc函数,它们所申请的东西都是存放在堆中的

stack栈:这是程序运行时被调用最频繁的了,它的结构很适合存储不长时间存在的变量,以及断点记录,每当一个函数执行完,它就会释放此次函数所产生的空间

补充:

我们仔细去看看图片就会发现,堆空间是向上扩张的,栈空间是向下扩张的,除了这两个空间,其它的空间都是静态资源,即在编译时分配的空间在执行的时候所需的空间还是那么大

栈空间是紧贴内核区的,因为栈在程序运行时本身就需要大量的操作,即使在内存中,把数据送到cpu或内核都是要开销的,所以为了使计算机可以快起来,栈作为操作多的结构就被选择紧贴内核

堆中存储的数据结构普遍都很大,包括对象这些操作集合,它们两者都向中间靠,会不会相遇呢?其实中间的数据区空间是很大的,绝大多数情况不会

栈中存储的都是值类型,指针也是值类型

二.JVM中的内存模型

内存模型分析

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

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

相关文章

【Java】医院智能导诊小程序源码,springboot框架

智能导诊 可以根据用户症状描述精准推荐科室及医生智能学习医院历史数据及自动进行科室对照,与医院的系统连接后,患者可直接完成预约。 一、系统概述 “智能导诊”以人工智能手段为依托,为人们提供智能分诊、问病信息等服务,在一定程度上满足了人们自我…

Spring框架中如何解决日志输出类型的问题

问题的描述 在学习Spring框架的过程中,运行应用程序时,会出现非常详细的日志输出,影响我对于最终输出结果的观察,具体情况见下图: 解决办法 在resource文件夹下,创建log4j.xml配置文件,Spring …

算法-排序算法

0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间…

【vue3】toRef与toRefs的使用,toRef与ref的区别

假期第四篇,对于基础的知识点,我感觉自己还是很薄弱的。 趁着假期,再去复习一遍 1、toRef与toRefs 创建一个ref对象,其value值指向另一个对象中的某个属性 语法:const name toRef(person,‘name’&#xf…

【c++随笔07】常量、变量、static

【c随笔07】常量、变量、static 1、常量、变量1.1、声明变量1.2、使用常量 2、static介绍2.1、static 局部变量2.2、static 全局变量2.3、C static静态成员变量2.4、C static静态成员函数详解 原创地址,https://zhengjunxue.blog.csdn.net/article/details/13167770…

偏微分方程的人工智能

9 偏微分方程的人工智能 在本节中,我们详细介绍了用于解决偏微分方程(Partial Differential Equations,PDEs)的人工智能领域的进展。我们在第9.1节中概述了PDE建模的一般形式,并阐述了在这个背景下使用机器学习方法的…

前端两年半,CSDN创作一周年

文章目录 一、机缘巧合1.1、起因1.2、万事开头难1.3、 何以坚持? 二、收获三、日常四、憧憬 五、总结 一、机缘巧合 1.1、起因 最开始接触CSDN,还是因为同专业的同学,将计算机实验课的实验题,记录总结并发在了专业群里。后来正式…

Airtest1.2.7新增断言API介绍

1. 前言 1.2.7版本的Airtest中,一个很重要的功能是 新增了非常丰富的断言API ,今天我们就来详细看一下Airtest都给我们提供了哪些断言语句。 2. 旧版Airtest提供的断言语句 先回顾下,旧版Airtest一直以来,都只给我们提供了2种断言…

软件工程与计算(一)软件工程基础

国庆快乐,今天开始更新《软件工程与计算(卷二)》的重要知识点内容~ 一.软件 1.软件独立于硬件 早期的软件是为了计算机硬件在研究型项目中而开发制造的,人们使用专门针对于硬件的指令码和汇编语言编写,这也是最早软件…

中文符号雨python

参考地址 字体地址也可以自己找一下资源 import pygame import randomdef main():# 初始化pygamepygame.init()# 默认不全屏fullscreen False# 窗口未全屏宽和高WIDTH, HEIGHT 1000, 600init_width, init_height WIDTH, HEIGHT# 字块大小,宽,高sufac…

【计算机网络】网络层-控制平面(学习笔记)

一、路由原理 1、网络层功能 1)数据平面 转发:将分组从路由器的一个输入端口移到合适的输出端口 2)控制平面 路由:确定分组从源到目标的路径 2、路由算法 路径长度可靠性延迟带宽负载通信代价 3、路由的原则 1&#xff0…

2021-06-11 51蛋骗鸡用小数点作秒指示,分钟计时.(怎么用二个数码管做分的倒计时,DP亮灭来计秒)

缘由怎么用二个数码管做分的倒计时,DP亮灭来计秒,求思路 - 24小时必答区 #include "REG52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; sbit BUZ1P1^0; bit k0; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,111,128};//0-9. unsign…

4. 条件查询

首先区分下match,match_phrase,term, 参考:https://zhuanlan.zhihu.com/p/592767668?utm_id0 1、全量查询分页指定source 示例:请求地址为http://127.0.0.1:9200/students/_search,请求体为: {"query":…

git使用,一点点

查看自己有没有安装git git --version 如果没有安装请执行sudo yum install -y git来安装 git 指令 git log 查看日志 git pull 同步远端和本地仓库 这就是冲突的报错: 所以这个时候你要同步一下git pull

MATLAB中d2d函数用法

目录 语法 说明 示例 重新采样离散时间模型 重新采样已识别的离散时间模型 d2d函数的功能是重新采样离散时间模型。 语法 sys1 d2d(sys, Ts) sys1 d2d(sys, Ts, method) sys1 d2d(sys, Ts, opts) 说明 sys1 d2d(sys, Ts)将离散时间动态系统模型 sys 重新采样&#…

【精品】Springboot 接收发送日期类型的数据

问题 无法请求到后台,后台报错:[Failed to convert property value of type java.lang.String to required type java.time.LocalDateTime for property : 2023-10-02T09:26:16.06908:00 WARN 14296 --- [p-nio-80-exec-1] .w.s.m.s.Defaul…

【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器

State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变。 在状态变量相关装饰器中,State是最基础的,使变量拥有状态属性的装饰器&am…

2021-06-09 51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次

缘由51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次_嵌入式-CSDN问答 #include "REG52.h" sbit K1 P1^0; sbit K2 P1^1; sbit LEDP0^0; void main() {unsigned char Xd0,ss0;unsigned int wei0;while(1){if(K10&&Xd0){ss3*2;…

程序调试技巧

多线程调试 有个开关的,在Eclipse里默认开启,在IntelliJ IDEA里默认是没有开启的。也就是说如果你在IDEA里代码里加断点,虽然一个线程的断了下来,但其他线程的已经执行过了。此处把线程的suspend设置成和Eclipse模式一样之后&…

华为云云耀云服务器L实例评测|Elasticsearch的Docker版本的安装和参数设置 端口开放和浏览器访问

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍Elasticsearch的Docker版本的安装和参数设置,端口开放和浏览器访问。 其他相关的华为云云…