java基础学习 day21(数组的内存原理)

1. java内存分配

  • 栈:方法运行时使用的内存,比如main ()方法运行,进入栈中运行。方法开始执行时会进栈,代码执行完毕会出栈。
  • 堆:存储对象或者数组,用new关键字来创建的,都存储在堆中。new出来的东西会在这块内存中开辟空间并产生地址。
  • 方法区(元空间):存储可以运行的.class文件(字节码文件)。当一个类要开始运行时,就会把这个类的字节码文件加载到方法区中,临时存储。
  • 本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关
  • 寄存器:给cpu使用,和我们开发无关
  • 注意:从JDK8开始,取消了方法区,新增元空间,把原来方法区的多种功能进行拆分,有的功能放到了堆中,有的功能放到了元空间中。
    在这里插入图片描述

2. 数组的内存图

  • 变量里存储的是具体的数值,且这个具体的数值就存储在栈内存的一块小空间中,当方法运行结束出栈时,方法里的变量也随之消失。
    在这里插入图片描述
  • 数组名里存储的是堆内存中的一块空间的地址值,这块空间用来存储数组里的数据。
    在这里插入图片描述
    例如:arr[1] 先通过arr(数组名)存储的地址值,找到该数组在堆内存中具体位置,再通过1索引找到该数组的第二个数据。

总结:
a. 只要是new出来的一定是在堆内存里面开辟了一个小空间。
b. 如果new了多次,那么堆里面有多个小空间,每个小空间中都有各自的数据,且相互独立。
c. 当两个数组指向同一个小空间时(即两个数组名存储的是同一个地址值),其中一个数组对小空间中的值进行了改变,那么其他数组再次访问的时候都是修改之后的结果了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿罗小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值