簡體   English   中英

Java集合內存消耗

[英]Java collections memory consumption

假設我實例化了10萬個向量

a[0..100k] = new Vector<Integer>();

如果我這樣做

a[0..100k] = new Vector<Integer>(1);

他們會占用更少的內存嗎? 那就是忽略它們中是否包含東西,以及當必須包含多個元素時擴展它們的開銷。

根據Javadoc ,向量的默認容量為10,因此我希望它比容量為1的向量占用更多的內存。

實際上,除非您需要使用另一個需要向量的API,否則您可能應該使用ArrayList

好吧,是的。 IIRC Vector默認內部初始化16個元素,這意味着由於字節對齊和底層VM完成的其他工作,您最初會節省大量內存。

不過,您想完成什么?

是他們會。 當需要從根本上改善程序的內存消耗時,為集合放入合理的“初始大小”是我要做的第一件事。

創建Vector ,您可以指定希望它在開始時具有的大小,或者保留一些默認值。 但是應該注意,在任何情況下, Vector存儲的所有內容都只是一堆引用,與它們實際指向的對象相比,它們所占的位置很小。

因此,是的,您將首先保存位置,但僅保存等於默認大小與指定大小之間的差值乘以參考變量大小的數量。 如果像您這樣創建大量矢量,則初始大小確實很重要。

是的,它會的。 默認情況下,Vector為10個元素分配空間。

Vector()構造一個空向量,使其內部數據數組的大小為10,其標准容量增量為零。增量為零。

因此,它將為10個內存引用保留內存。

話雖如此,在現實生活中,這很少引起關注。 如果您確實要生成100,000個向量,則需要重新考慮您的設計增量為零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM