主页>技术知识>详情

java 创建一个容量为十的数组和创建十个容量为一的数组,哪个占内存更大?

villain/2022-02-23/134阅读 /0评论
java 创建一个容量为十的数组和创建十个容量为一的数组,哪个占内存更大?简介:java 创建一个容量为十的数组和创建十个容量为一的数组,哪个占内存更大?解决方法:<p>因为对象除了包含实际的数据外还有对象头。10个数组对象就有10个对象头,而1个数组则只有一个对象头。那具体差别是多少呢?可以写代码测试一下

java 创建一个容量为十的数组和创建十个容量为一的数组,哪个占内存更大?

java 创建一个容量为十的数组和创建十个容量为一的数组,哪个占内存更大?


解决方法:

因为对象除了包含实际的数据外还有对象头。10个数组对象就有10个对象头,而1个数组则只有一个对象头。那具体差别是多少呢?可以写代码测试一下。使用openjdk/jol 可以查看对象实际的内部布局。

  public static void main(String[] args) {
    int[] array1 = {1};
    int[] array2=new int[10];
    for (int i = 0; i < 10; i++) {
      array2[i]=i;
    }
    System.out.println(ClassLayout.parseInstance(array1).toPrintable());//Instance size: 24 bytes
    System.out.println(ClassLayout.parseInstance(array2).toPrintable());//Instance size: 56 bytes
  }

可以看到array1 存储一个数字,占用24字节,10个就是240字节。而array2存储10个数字只有56字节。


正解
:+1:

必然十个容量为一的数组占用内存更大


回复 @sfasdfasdfasf : 数组对象也有对象头
为什么呢

第二个


一样的


创建十个不是连续的内存

创建一个十大小的内存是连续的

 


必然十个容量为一的数组占用内存更大;创建一个数组对象需要消耗内存空间,创建十个数组对象的内存消耗肯定比一个数组对象内存消耗大!


1、需要指针标记,是个数组就需要十个内存地址的指针标记
2、垃ji回收器需要进行对象标记,十个数组对象就需要十个标记

本文用户投稿或网站收集转载,如有侵权请联系本站。