繁体   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