首页 > 系统相关 >Day24.2.数组在内存中的存储方式

Day24.2.数组在内存中的存储方式

时间:2022-12-21 18:46:35浏览次数:64  
标签:存储 变量 对象 Day24.2 内存 数组 引用

Day24.2.数组在内存中的存储方式

数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。

如,定义了一个a[i]的数组,具体a[0],a[1]...中存储的值是数组元素,而i是引用变量

与所有引用变量相同的是,引用变量是访问真实对象的根本方式。但不是唯一(如地址)。

实际的数组元素被存储在堆(heap)内存中;数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中。

通过

为什么会有栈内存与堆内存之分

当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见),则这个对象依然不会被销毁。只有当一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会在合适的时候回收它。

如果堆内存中数组不再有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾回收机制回收。因此,为了让垃圾回收机制回收一个数组所占的内存空间,则可以将该数组变量赋为null,也就切断了数组引用变量和实际数组之间的引用关系,实际数组也就成了垃圾。

参考:https://blog.csdn.net/fafawf/article/details/107484264

标签:存储,变量,对象,Day24.2,内存,数组,引用
From: https://www.cnblogs.com/HomeFJ/p/16996921.html

相关文章

  • Day24.1.二维数组
    Day24.1.二维数组多维数组可以看成数组的数组,如,二维就是一维中的元素变为数组,数组中存元素1.二维数组的声明创建 inta[][]=newint[2][5]; intb[][]={{1,2},{3,......
  • Day24.1.数组入门
    Day24.1.数组入门1.定义数组是相同数据的有序集合每个数据为一个数组元素,每个数组元素可以通过一个下标来访问他们2.数组的声明创建声明: //方法一 dataTyp......
  • 内存溢出分析工具MAT实战(一)JVM启动参数分析
    在工作的过程中,有时我们会遇到内存溢出的问题,这时候就需要我们有足够的知识积累去解决内存溢出相关问题。本文章是建立在读者了解java的内存结构的基础上。关于内存分析工具......
  • oracle 2个数组列,剔除数组重复的数据。
    一、下面这样不规则的,数据如何剔除掉。循环筛选replace替换掉。序号正常时间剔除时间1   2022-12-19,2......
  • 数组拷贝之arraycopy
      本文主要分两部分:手动实现数组拷贝功能使用并分析System类中的数组拷贝方法1.手动实现数组拷贝功能首先来看看我们的需求:有两个已知数组如上图,从src数组中拷......
  • 从对象数组中提取某些属性组成新的对象数组
    letarrold=[{name:"name1",age:"1",date:'2016-05-03'},{name:"name2",age:"2",date:'2016-05-02'},......
  • JavaScript中数组中的方法
    将数组转换成字符串JavaScript方法 toString() 把数组转换为数组值(逗号分隔)的字符串。实例: varfruits=["Banana","Orange","Apple","Mango"]; ......
  • jvm内存划分
    首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执......
  • 根据进程 ID 获取进程 CPU 占用和内存占用等信息(C#)
    根据进程ID获取进程CPU占用和内存占用等信息(C#)代码参考PerformanceCounter?cpuCounter=null;PerformanceCounter?ramCounter=null;PerformanceCounter......
  • 操作系统的内存管理你知道吗
    brk()的作用也只是通知​​Linux内核哪个范围的堆内存是可用的,真正的物理内存页是在进程实际读写内存的时候才会申请,而且是由内核根据写时复制/需求加载自动完成的,应用程序......