Java中数组在内存中存放原理的讲解

 更新时间:2019年04月10日 10:51:37   作者:yangyongUestc  
今天小编就为大家分享一篇关于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)字节。

对于更高维的数据存储容量,可以按照相似的方法进行分析即可。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • 使用@CacheEvict 多参数如何匹配删除

    使用@CacheEvict 多参数如何匹配删除

    这篇文章主要介绍了使用@CacheEvict 多参数如何匹配删除,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 完美解决idea光标变成了insert光标状态的问题

    完美解决idea光标变成了insert光标状态的问题

    这篇文章主要介绍了完美解决idea光标变成了insert光标状态的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Maven Web项目使用Cargo插件实现自动化部署的详细步骤

    Maven Web项目使用Cargo插件实现自动化部署的详细步骤

    cargo ,它是一组帮助用户实现自动化部署,操作Web容器的工具,并且几乎支持所有的Web容器,这篇文章主要介绍了Maven Web项目使用Cargo实现自动化部署,需要的朋友可以参考下
    2023-02-02
  • Javac/javap 自带工具简单使用讲解

    Javac/javap 自带工具简单使用讲解

    这篇文章主要介绍了Javac/javap 自带工具简单使用讲解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • java实现静默加载Class示例代码

    java实现静默加载Class示例代码

    这篇文章主要给大家介绍了关于java实现静默加载Class的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • java门禁系统面向对象程序设计

    java门禁系统面向对象程序设计

    这篇文章主要为大家详细介绍了java门禁系统面向对象程序设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Java 反转带头结点的单链表并显示输出的实现过程

    Java 反转带头结点的单链表并显示输出的实现过程

    这篇文章主要介绍了Java 反转带头结点的单链表并显示输出,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)

    java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)

    这篇文章主要介绍了java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP),非常具有实用价值,需要的朋友可以参考下
    2018-08-08
  • Java多线程中Thread.currentThread()和this的区别详解

    Java多线程中Thread.currentThread()和this的区别详解

    这篇文章主要介绍了Java多线程中Thread.currentThread()和this的区别详解,Thread.currentThread()方法返回的是对当前正在执行的线程对象的引用,this代表的是当前调用它所在函数所属的对象的引用,需要的朋友可以参考下
    2023-08-08
  • 在SpringBoot中使用MongoDB完成数据存储

    在SpringBoot中使用MongoDB完成数据存储

    本文主要介绍了在SpringBoot中如恶化使用MongoDB完成数据存储,接下来这篇我们将围绕MongoDB进行,MongoDB是一个开源的,面向文档的NoSQL数据库管理系统,使用类似JSON的BSON(二进制JSON)格式来存储数据,具有灵活的数据模型和强大的查询功能,需要的朋友可以参考下
    2023-11-11

最新评论