您的位置:首页 > 编程语言 > Java开发

Java中ArrayList内存分配问题

2015-10-08 21:42 525 查看
在深入学习Java语言时,当了解到对象在内存中的分配情况时,于是对动态数组ArrayList等集合类是如何分配内存空间的产生了兴趣,于是结合百度网友的回答问题,给大家一个分享咯。感谢网友 java软件工程师 文思海辉java 的耐心回答。

原文请参见[JAVA里,ArrayList在内存分配上究竟是怎样的?(http://zhidao.baidu.com/link?url=xDZd1EM9S95C5VKkWJe1Va5ymJjnNXQ0xpgR1X3wjnl1K31Z51I4mNX8VJ9emzRMlGvVtUnYMFz9cY8MnCWk3NczEN7juCxr6AEDO4qWarm)

ArrayList就是动态数组,也是一个对象。

创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域。

1、ArrayList是用数组实现的,这个数组的内存是连续的,不存在相邻元素之间还隔着其他内存。

2、索引ArrayList时,速度比原生数组慢是因为你要用get方法,这是一个函数调用,而数组直接用[ ]访问,相当于直接操作内存地址,速度当然比函数调用快。

3、新建ArrayList的时候,JVM为其分配一个默认或指定大小的连续内存区域(封装为数组)。

4、每次增加元素会检查容量,不足则创建新的连续内存区域(大小等于初始大小+步长),也用数组形式封装,并将原来的内存区域数据复制到新的内存区域,然后再用ArrayList中引用原来封装的数组对象的引用变量引用到新的数组对象

elementData = Arrays.copyOf(elementData, newCapacity);


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: