Java中一维数组的内存解析(浅显易懂,新手必看)

1.初识JVM

要认识Java中一维数组的内存存储情况,首先应该简单了解一下JVM这个概念

1.1什么是JVM

JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

1.2JVM的作用

相信很多人都认为Java是应用范围最广的语言之一,有一个很大的原因是Java的跨平台性,而Java的跨平台性实际上是依附于JVM这个设定:
Java是一门抽象程度特别高的语言,提供了自动内存管理等一系列的特性。这些特性直接在操作系统上实现是不太可能的,所以就需要JVM进行一番转换。

在这里插入图片描述

从图中可以看到,有了JVM这个抽象层之后,Java就可以实现跨平台了。JVM只需要保证能够正确执行.class文件,就可以运行在诸如Linux、Windows、MacOS等平台上了。 而Java跨平台的意义在于一次编译,处处运行,能够做到这一点JVM功不可没。

1.3JVM、JRE、JDK的关系

在这里插入图片描述
JVM是Java程序能够运行的核心。JVM、JRE、JDK的关系简单来说可以是包含关系:
JDK=JRE+开发工具集,JRE=JVM+Java标准类库。
仅仅依靠JVM是无法完成对程序的编译和运行的,JVM需要一些标准类库的帮助,举一个通俗的例子,你是JVM可以理解为一个游侠,而标准类库相当于一本本武林秘籍,游侠没有人教他方法永远成为不了高手,而标准类库正是教会了游侠怎么去练武术,所以JRE=JVM+Java标准类库。而JDK=JRE+开发工具集,有了武林秘籍,要成为高手还需要趁手的兵器啊,而开发工具集(比如javac、java、jar等)就是趁手的兵器。

2.JVM中的内存空间的分配(重点)

由于Java环境版本的不同,JVM的内存分配也有一些差异,本文章主要注重新手小白对JVM内存空间的理解,所以会用一种比较通俗容易理解的方式介绍,各位老鸟们看个热闹就行

2.1JVM中的空间分配

这里借用一下尚硅谷的图(狗头保命)
在这里插入图片描述
从图里可以清楚的看出来,JVM的内存空间是由**栈(stack),堆(heap),方法区(常量池和静态域等)**组成的。
JVM的组成部分我会进行一步进行说明:
:提到栈我们可以想到客栈,就是居住人的房间。在计算机领域我们暂且可以简单地理解为数据居住的房间,在这个房间内的数据可以先简单抽象理解为被一维地排放了。
在这里插入图片描述
:那么什么是堆呢?堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组对象。这个概念可能对于初学者太难理解,我们可以暂且简单地,粗糙地,不严谨地理解为一个以二维方式存放数据的房子。
*方法区:*方法去用于储存已被虚拟机加载地类型信息,常量,静态变量,即编译器编译后的代码缓存等数据。(对于本文讨论的问题关系不大,不做过多的解释)。

2.1创建一维数组的时候JVM怎么分配空间?

那么重中之重来了,我们在创建一个一维数组时,JVM的内存空间到底是怎么分配的呢?
我们不妨通过结合一段具体的程序来思考这个问题(下面的程序均在main方法中)

int[]arr =new int[]{1,2,3};

因为程序在main方法中,所以为局部变量,局部变量放在栈之中,所以arr放在栈里面。new出来的结构放在堆里面,别问,问就是规定*。所以会在堆空间中创建三个连续的内存空间来用来存放数组中的三个元素,其中第一个元素有一个对应的首地址值(十六进制),如下图所示
在这里插入图片描述
地址值会被赋予给arr从而让arr可以通过三个元素中第一个元素的首地址值找到这三个元素,这一点类似于C语言的指针,可以理解为arr通过地址值找到了数组中的元素,如下图所示:
在这里插入图片描述
找到了位置,那么赋值就开始了,其实对于这个具体的程序来说,里面的元素初始默认值应该是0,0,0,之后0,0,0会被按照我们的想法被赋予1,2,3。

OK,数组被赋值,内存空间被重新占有
本文结束!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值