黑豹程序员 堆和栈

简单变量及作用域

main()
  int x=1;
show ()
  int x=2

执行步骤:

第1步:main()函数是程序入口,JVM先执行,在栈内存中开辟一个空间,存放int类型变量x,同时附值1。

第2步:JVM执行show()函数,在栈内存中又开辟一个新的空间,存放int类型变量x,同时附值2。
此时main空间和show空间并存,同时运行,互不影响。

第3步:show()执行完毕,变量x立即释放,空间消失。但是main()函数空间仍存在,main中的变量x仍然存在,不受影响。

在这里插入图片描述

创建数组、赋值、置空

main()
  int[] x=new int[3];
  x[0]=20;
  x = null;

执行步骤:

第1步:执行int[] x = new int[3];
执行main()函数,在栈内存中开辟一个空间,存放x变量(x变量是局部变量)。
同时,在堆内存中也开辟一个空间,存放new int[3]数组,堆内存会自动分配内存首地址值,如0x0045。
数组在栈内存中的地址值,会赋给x,这样x也有地址值。所以,x就指向(引用)了这个数组。此时,所有元素均未赋值,但都有默认初始化值0。

第2步:执行x[0]=20
即在堆内存中将20赋给[0]这个数组元素,这样,数组的三个元素值分别为20,0,0。

第3步–执行x=null
null表示空值,即x的引用数据内存地址0x0045被删除了,则不再指向堆内存中的数组。此时,堆中的数据不再被x使用了,即被视为垃圾,JVM会启动垃圾回收机制,不定时自动删除。

在这里插入图片描述

数组复制、元素赋值

main()
  int[] x=new int[3];
  int[] y=x;
  y[1]=100
  x=null;

执行步骤:

第1步:与上例第1步一致,略。

第2步:执行int[] y=x
在栈内存定义了新的数组变量内存y,同时将x的值0x0045赋给了y。所以,y也指向了堆内存中的同一个数组。

第3步–执行y[1]=100
即在堆内存中将100赋给[1]这个数组元素。这样,数组的三个元素值分别为0,100,0

第4步–执行x=null
则变量x不再指向栈内存中的数组了。但是,变量y仍然执行,所以数组不消失。
在这里插入图片描述

创建对象、赋值

Car c=new Car;
c.color=“blue”;
Car c1=new Car;
c1.num=5;

虽然是个对象引用new Car,但是是两个不同的对象。每一次new,都产生不同的实体。
在这里插入图片描述

对象复制

在这里插入图片描述

栈和堆的特点

栈:

函数中定义的基本类型变量、对象的引用变量都在函数的栈内存中分配
栈内存特点,数据一执行完毕,变量会立即释放,节省内存空间。
栈内存中的数据,没有默认初始化值,需要手动设置。

堆:

堆内存用来存放new创建的对象和数组
堆内存所有的实体都有内存地址值
堆内存中的实体是用来封装数据的,这些数据都有默认初始化值。
堆内存中的实体不再被指向时,JVM启动垃圾回收机制,自动清除。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轻兔推荐 —— Snipaste

via:轻兔推荐 - https://app.lighttools.net/ 简介 Snipaste 是一个简单但强大的截图工具,支持Windows和Mac,允许用户快速截图并进行编辑,如添加标注、文字和马赛克。 - 它还具有贴图功能,可以将截图或剪贴板内容固定…

Flash Diffusion 加速文生图模型生成;Pixart-α加速测试

参考:https://github.com/gojasper/flash-diffusion https://huggingface.co/jasperai/flash-pixart 安装包注意: diffusers 这里是官方上面有更改,参考:https://github.com/gojasper/flash-diffusion/blob/main/requirements.txt pip install -r requirements.txt dif…

第18篇 Intel FPGA Monitor Program的使用<一>

Q:Intel FPGA Monitor Program开发工具可以支持Terasic的FPGA开发板使用吗? A:Intel FPGA Monitor Program 是Intel提供的适用于 ARM* Cortex*-A9 处理器和 Nios II 处理器的完整软件开发环境,它包括编译工具以及完整的调试功能&…

如何格式化U盘?4个正确方法,记得收藏好!

“我的u盘不知道是中病毒还是什么原因,现在没法使用了,我想将它进行格式化操作,想问问大家应该如何格式化u盘呢?请帮帮我!” U盘作为我们日常生活中不可或缺的存储设备,常常用于传输和保存各种重要数据。然…

【深度学习】Loss为Nan的可能原因

文章目录 1. 问题情境2. 原因分析3. 导致Loss为Nan的其他可能原因 1. 问题情境 在某个网络架构下,我为某个数据项引入了一个损失函数。 这个数据项是nn.Embedding类型的,我加入的损失函数是对nn.Embedding空间做约束。 因为我在没加入优化loss前&#x…

34、matlab输入命令汇总

1、ans:最近计算的答案 代码示例1 12ans 3 代码示例2 Brand(7)B 列 1 至 60.7060 0.3171 0.1869 0.6797 0.5853 0.95930.0318 0.9502 0.4898 0.6551 0.2238 0.54720.2769 0.0344 0.4456 0.1626 0.7513 0.13860.0462 0.4387…

比亚迪员工待遇公开:70万员工都是靠真本事拿钱,这里没有大锅饭

比亚迪 近日,车企巨头比亚迪的内部信被曝光。 内部信内容是关于员工待遇的,信中反复强调:比亚迪始终坚持为每一位员工提供公平合理的工作环节和回报机制,鼓励员工工作中展现努力施展自己的才华和价值,来获得更为丰厚的…

AI写作工具:提升工作效率的五大利器

不知道大家有没有发现,随着人工智能技术的快速发展,AI工具正逐渐渗透到我们日常生活的各个方面,极大地提高了我们的工作和学习效率。无论是AI写作、AI绘画、AI思维导图,还是AI幻灯片制作,这些工具已成为我们不可或缺的…

使用 Scapy 库编写 TCP 窗口大小探测攻击脚本

一、介绍 1.1 概述 TCP窗口大小探测攻击是一种信息收集攻击,攻击者通过向目标服务器发送特制的TCP数据包,探测目标服务器的TCP接收窗口大小(TCP Window Size)。了解目标服务器的TCP接收窗口大小,可以帮助攻击者优化后…

70N10-HG010N10L 高压场效应MOS管TO-252封装 散热好 抗雪崩能力强

概述 FSMOSMOSFET基于惠海半导体的器件设计,可实现低功耗RDS(ON)、低栅极电荷、快速切换和优异的雪崩特性。低Vth系列是专门为具有低驱动电压的同步整流系统而优化的。 特征 RDS(ON)和FOM低 低开关损耗 卓越的可靠…

一颗万能的PD协议芯片,能芯Type-C PD协议芯片“ECP5705”, 它是如何实现PD直流风扇应用呢?

文章目录 文章目录 前言 一、PD风扇方案介绍 二、芯片介绍 三、PD风扇-供电方式 四、能芯科技 PD 协议芯片ECP5705-应用场景 总结 前言 随着USB Type-C接口的普及和PD取电芯片的出现,使得小型家电和电动工具可以通过统一的USB Type-C接口进行充电,极大地…

【MySQL】复合查询+表的内外连接

复合查询表的内外连接 1.基本查询回顾2.多表查询3.自连接4.子查询4.1单列子查询4.2多列子查询 5.在from子句中使用子查询6.合并查询7.表的内连和外连7.1内连接7.2外连接7.2.1左外连接 7.2.2右外连接 点赞👍👍收藏🌟🌟关注&#x1…

哪个牌子的充电宝好?有必要买充电宝吗?买充电宝认准这几个牌子

在现代快节奏的生活中,智能手机等电子设备已经成为我们日常生活中不可或缺的一部分。然而,电量不足的困扰时常困扰着我们,特别是在外出时。面对这种情况,共享充电宝成为了不少人的临时解决方案,但其高昂的租赁费用和使…

littlefs性能分析提升

littlefs性能分析 分析的目的很简单:希望支持掉电安全,或者说具有奔溃一致性特性的文件系统,他的读写速度能得到提升。如果了解了瓶颈所在,也可触类旁通。 本次分析,使用了大量的对比测试: littlefs读&a…

带你学习Mybatis之SqlSession

SqlSession是mybatis的核心接口,SqlSessionFactory负责创建SqlSession对象,包含多个openSession()方法的重载。 在SqlSession中定义了常用的数据库操作以及事务操作,接口定义如下 SqlSession public interface SqlSession extends Closeable …

Axios网络请求

网页:Axios中文文档 | Axios中文网Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.jshttps://www.axios-http.cn/ 安装命令npm install axios 上一节创建的项目终端安装,安装完成 生命周期函数 App.vue在上述位置加入代码 …

【区块链】深入解析Proof of Work (PoW): 区块链技术的核心驱动力

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 深入解析 Proof of Work (PoW): 区块链技术的核心驱动力引言一、PoW基本概念1.1…

【linux网络(二)】网络基础之套接字编程

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux网络 1. 前言2. 端口号详…

微服务之熔断器

1、高并发带来的问题 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因 或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会…

iPhone - 为什么姓名和付款都变成灰色?

问题描述 为什么姓名和付款都变成灰色?点开订阅也显示图 2 的无法连接? 原因分析 联网 WIFI 没有对『设置』开放权限。 解决方案 设置 - 无线局域网 - 使用无线局域网与蜂窝网络的App - 找到『设置』应用 - 勾选『无线局域网与蜂窝数据』