2
A
回答
2
所以,當你在ArrayList中添加元素在內部它調用下面的方法:
/**
* Increases the capacity of this <tt>ArrayList</tt> instance, if
* necessary, to ensure that it can hold at least the number of elements
* specified by the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity
*/
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
而且在上述方法中,Arrays.copyOf method
進一步達到以下的本地方法,
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
所以對於java,你必須看到openjdk
原生方法代碼。
1
基本上,Java的ArrayList通常確保數組中有足夠的空間供元素適合。如果數組不夠長,那麼它爲它們提供了更多空間:使用原始數組的兩倍大小創建新數組,並將元素複製到其中。 (DEFAULT_CAPACITY = 10)
public void ensureCapacity(int minCapacity){
int current = data.length;
if (minCapacity > current)
{
E[] newData = (E[]) new Object[Math.max(current * 2, minCapacity)];
System.arraycopy(data, 0, newData, 0, size);
data = newData;
}
}
您可以從ArrayList中實施的ensureCapacity方法看到它:
http://developer.classpath.org/doc/java/util/ArrayList-source.html
如果不能提供足夠的空間,那麼它會拋出一個「的java.lang。的OutOfMemoryError:Java堆空間」
你可以在這裏檢查:http://javarevisited.blogspot.com/2011/09/javalangoutofmemoryerror-permgen-space.html
相關問題
- 1. 內存分配Java
- 2. Java - 類的內存分配
- 3. 由java分配的內存
- 4. java中的預分配內存
- 5. java中對象的內存分配
- 6. 內存分配在Java中的類?
- 7. java jvm內存分配
- 8. java動態內存分配
- 9. Java swing gui內存分配
- 10. Java中的內存分配/取消分配
- 11. 釋放內存分配給Java中
- 12. 在java中查看內存分配
- 13. ArrayList vs通用列表在C#中的內存分配?
- 14. 成員函數的Java內存分配
- 15. 實例變量的Java內存分配
- 16. 的Java分配內存泄漏
- 17. Java的內存分配對齊
- 18. C中的內存分配
- 19. ruby中的內存分配
- 20. C++中的內存分配
- 21. OpenGL中的內存分配
- 22. 類中的內存分配
- 23. VisualStudio中的內存分配!
- 24. Lisp中的內存分配
- 25. C++中的內存分配
- 26. Java的ArrayList的內存問題
- 27. 內存分配
- 28. 內存分配
- 29. 內存分配
- 30. 內存分配
爲什麼不看源代碼!? – rocketboy
這些是JVM本機調用。它沒有在Java中實現。 –
因爲什麼時候ArrayList沒有在Java中實現? –