Java中数组在内存中存放原理的讲解
作者:yangyongUestc 发布时间:2022-12-10 03:48:35
标签:java,数组,内存,存放原理
Java中数组被实现为对象,它们一般都会因为记录长度而需要额外的内存。对于一个原始数据类型的数组,一般需要24字节的头信息再加上保存值所需的内存,其中24字节的头信息分别包含以下几个部分。
下面分别分析一维、二维、三维的数组存储情况。
下面首先对一维数组进行分析,以int[]型数组为例,假设数组长度为N,那么需要的内存占用(24+4N)个字节,原因分析比较简单,图解示例如下:即占用内存总量=头信息内存+数组N个int值占用内存。
对于二维数组进行分析,首先对于多维数组的概念,大家可以参考这篇文章:https://www.jb51.net/article/154585.htm
多维数组实际存储的时候就是一维数组,高维数组不断的降维转化为低维数组,例如二维数组就是一个数组的数组,即每一个一维数组里面包含一个另外一个一维数组的引用。以一个MxN的double类型的二维数组为例,其实际占用内存总量为:(8MN+32M+24) 约等于8MN。这里仍然以图示进行讲解:(这里以64位架构的计算机为例,每个对象引用地址为8位)
对于三维数组的分析,仍然以M x N x Q的double数组为例,与上面的分析过程类似,可以将三维数组转化成一个一维数组,该一维数组保存指向二维数组的引用。对于二维数组的分析过程则和上面的过程一样。
则占用的内存总共为:24 + 8M + M*(24 + 8N) + M*N(24 + 8Q)字节。
对于更高维的数据存储容量,可以按照相似的方法进行分析即可。
来源:https://blog.csdn.net/yangyong0717/article/details/79165685
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 1.使用keySet进行遍历实现步骤:(1)使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中(
- 1、抓取一般内容需要三个类:WebRequest、WebResponse、StreamReader所需命名空间:System.Net、Sys
- springboot去除控制台打印的debug日志1.创建logback-spring.xml文件文件内容如下<?xml versio
- 前言有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般
- Maven搭建springboot项目本文是基于Windows 10系统环境,使用Maven搭建springboot项目Windows 10
- 本文实例讲述了在Linux上运行C#的方法。分享给大家供大家参考。具体方法如下:在任何一个平台(操作系统+硬件体系)上,编写和运行程序的三个
- 本文实例为大家分享了C++ socket实现miniFTP的方法,供大家参考,具体内容如下客户端:服务端:建立连接 &
- mapper.xml文件<?xml version="1.0" encoding="UTF-8"
- 来自同事_Smile的封装应用,记录学习一下,分享给大家,具体如下:1、AnimImageViewLoader类的封装/** * 适用于an
- 面向接口编程接口的定义及功能这里从java介入吧,在java中,接口是一种特殊的类,接口里面的量都是常量,接口的方法只有定义而没有实现,换句
- 1、什么是Callback,什么时候需要使用Callbackcallback是回调的意思,一般我们需要2个类需要相互掉用,一个类把数据动态传
- 关于《JavaCV的摄像头实战》系列《JavaCV的摄像头实战》顾名思义,是使用JavaCV框架对摄像头进行各种处理的实战集合,这是欣宸作为
- Spring boot项目结合docker容器用,打了个jar包,启动的时候竟然说:no main manifest attribute,
- 最近做一个需求,需求中的bean只用于生成一次json使用,所以想通过配置来动态的生成,查了一下,java还真有这个实现。java动态的生成
- 本文实例讲述了C#检测上传文件真正类型的方法。分享给大家供大家参考。具体分析如下:对于用户上传的文件如果只是根据扩展名判断,很容易上传上来可
- 给新建的winform程序添加资源文件夹Resources小菜鸟开始学习WinForm程序别人的项目都有资源文件夹放图片之类的,我的就是没有
- 一、基本使用它们是 LockSupport 类中的方法// 暂停当前线程LockSupport.park(); // 恢复某个线程的运行Lo
- 在res目录下建一个drawable文件夹,注意文件夹名字一定要是drawable,否则在xml模板中你是找不到shape的下图就通过一个x
- 前言在segmentfault上看到一个问题:java有完善的GC机制,那么在java中是否会出现内存泄漏的问题,以及能否给出一个内存泄漏的
- 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下:public class Sample1 {