Java中ArrayList內存分配問題

在深入學習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);

ArrayList內存分析

發佈了12 篇原創文章 · 獲贊 40 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章