Java中数组在内存中的存放原理?
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangyong0717/article/details/79165685
Java中数组被实现为对象,它们一般都会因为记录长度而需要额外的内存。对于一个原始数据类型的数组,一般需要24字节的头信息再加上保存值所需的内存,其中24字节的头信息分别包含以下几个部分。
下面分别分析一维、二维、三维的数组存储情况。
下面首先对一维数组进行分析,以int[]型数组为例,假设数组长度为N,那么需要的内存占用(24+4N)个字节,原因分析比较简单,图解示例如下:即占用内存总量=头信息内存+数组N个int值占用内存。
对于二维数组进行分析,首先对于多维数组的概念,大家可以参考这篇博客:https://www.cnblogs.com/chenyangyao/p/5222696.html
多维数组实际存储的时候就是一维数组,高维数组不断的降维转化为低维数组,例如二维数组就是一个数组的数组,即每一个一维数组里面包含一个另外一个一维数组的引用。以一个MxN的double类型的二维数组为例,其实际占用内存总量为:(8MN+32M+24) 约等于8MN。这里仍然以图示进行讲解:(这里以64位架构的计算机为例,每个对象引用地址为8位)
对于三维数组的分析,仍然以M x N x Q的double数组为例,与上面的分析过程类似,可以将三维数组转化成一个一维数组,该一维数组保存指向二维数组的引用。对于二维数组的分析过程则和上面的过程一样。
则占用的内存总共为:24 + 8M + M*(24 + 8N) + M*N(24 + 8Q)字节。
对于更高维的数据存储容量,可以按照相似的方法进行分析即可。
---------------------
作者:yangyongUestc
来源:CSDN
原文:https://blog.csdn.net/yangyong0717/article/details/79165685
版权声明:本文为博主原创文章,转载请附上博文链接!
Java中数组在内存中的存放原理?的更多相关文章
- Java中数组在内存中的图解
Java中的数组在内存中的图解,其实对于数组,还是比较熟悉的,平时用的也是很多的,在看数据结构与算法的极客时间专栏,最常用的10个数据结构:数组.链表.栈.队列.散列表.二叉树.堆.跳表.图.Trie ...
- Java 中数组的内存分配
Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...
- java boolean 值在内存中占几位?
java boolean 值在内存中占几位? <Java虚拟机规范>中这样描述:虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持.在Java虚拟机中没有任何供 ...
- Java数组在内存中是如何存放的
阅读目录 一维数组 二维数组 数组对象及其引用存放在内存中的哪里? Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字“new”创建时,会在堆上分配内存空间,然后返回对 ...
- Java 数组在内存中的结构
Java中的数组存储两类事物: 原始值(int,char,...),或者引用(对象指针). 当一个对象通过 new 创建,那么将在堆内存中分配一段空间,并且返回其引用(指针). 对于数组,也是同样的方 ...
- Java中对象在内存中的大小、分配等问题
Java创建一个对象的过程 是否对象指向的类已经加载到内存了 如果没有加载,就要经过load.linking(verification.preparation.resolution).initiali ...
- VB6之多维数组中元素在内存中的排列情况
Private Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal ...
- C# 数组在内存中的存储
C# 数组是引用类型,那么在内存中是如何存储的呢? 在VS中调试C#程序,如何查看内存.寄存器.反汇编 在这篇文章里看到了如何在VS 中查看内存 先断点打在数组创建后语句那里,点debug->W ...
- JVM中java实例对象在内存中的布局
普通的Java对象实例 和 Java数组实例.Java数组实例的对象头多了一个数组的长度.Java虚拟机可以通过普通java对象的元数据来确定java对象的大小,但是从数组的元数据中却无法确定数组的 ...
随机推荐
- 在centos上配置环境
1. 安装wget [root@localhost ~]# yum -y install wget 2. 在oneinstack官网配置安装环境 wget http://mirrors.lin ...
- Beyond Compare4 激活
当你使用过一段时间后会提示有问题,需要激活或者什么. 解决办法: 找到这个路径并删除其下Beyond Compare 4文件夹即可正常使用. C:\Users\******\AppData\Roami ...
- python 浮点运算
print(format(float(a)/float(b),'.2f'))
- optistruct对称约束设置
如对YZ面对称,则在对称面处约束1 5 6自由度.
- ORACLE Physical Standby DG 之fail over
SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;确认下是否存在日志间隙,发现gap现象,说明failo ...
- spring集成mongodb通过aop记录业务日志
1. 编辑 pom.xml 添加 maven 依赖 <!-- mongodb --> <dependency> <groupId>org.mongodb</g ...
- python监控ip攻击,服务器防火墙
'''写一个程序,监控nginx的日志,如果有人攻击就加入黑名单 把ip加入黑名单的策略是,1分钟之内,如果同一个ip请求超过200次,那就加入黑名单''' '''分析:1.打开文件 2.循环读取 3 ...
- uni-app学习资料整理-1.白话uni-app
白话uni-app https://ask.dcloud.net.cn/article/35657 文件内代码架构的变化 以前一个html大节点,里面有script和style节点: 现在templ ...
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第3节 Random类_10-练习一_生成1-n之间
生成随即数的时候,总是会短一个,因为它是从0开始的 这是左闭右闭区间. 循环100次输出的结果
- iView 实战系列教程(21课时)_1.iView 实战教程之配置篇_图片优化
首先需要安装vue cli 3.0版本 点击添加插件, 输入iview 选中后安装 全部导入还是按需导入. 2.是否需要自定义主题变量 3.多语言的设置. 这里我们全部选择为默认 然后点击继续. 启动 ...