Android Java ArrayList可能的最大尺寸

时间:2016-06-06 12:43:06

标签: java android arrays memory arraylist

我有班级模特:

 class MySongs {

      private int song_id;
      private int song_likes;
      private int song_plays;
      private String song_artist;
      private String song_title;
      private String song_lyric
      private String song_info;
      private String song_mp3_link;
      private String songs_photo_link;
      private String song_date;

      // with getters and setters for all variable

      public int getId() {...}
      public void setId(int id) {...}

      //and other ...

 }

现在,我希望在2000 MySongs对象中添加更多List<MySongs>

 int my_json_data_count = 2000;
 List<MySongs> my_data = new ArrayList();
 for (int i=0; i<my_json_data_count; i++) {
      MySongs mysongs = new MySongs();
      mysongs.setId(...);
      //....
      //...
      my_data.add(mysongs);
 }

 //
 my_data.size(); // 2000

数据的数量是否有限制? (对于内存)2000或3000或arrayList中的数据。

大约占用了多少内存空间?

或者根本没有,数据的数量是正常的吗?

2 个答案:

答案 0 :(得分:3)

ArrayList类是基于数组的实现,因此,可能项的最大数量应与数组中元素的最大数量一致。

就占用的内存量而言,这取决于存储对象的大小。存储100个对象后,如果它们太大,或者如果它们很小,则可能会存储数千个。

答案 1 :(得分:1)

如果您想知道给定对象在堆中占用多少内存,则应使用SizeOf并在对象上调用SizeOf.deepSizeOf以获得对象的深度。

请注意,大小取决于目标JVM,如果目标JVM是32-bit JVM64-bit JVM UseCompressedOops(-XX:+ UseCompressedOops),结果确实会改变)默认情况下启用的情况是小于32 GB的堆或禁用64-bit JVM的{​​{1}}(-XX:-UseCompressedOops)。