创建时分配的堆栈对象有多少内存?

时间:2016-02-11 14:44:19

标签: java memory stack

我想知道 - 在通过堆栈类定义新堆栈时

Stack stack=new Stack();

分配了多少内存?它不能取决于N个对象的数量(例如数组和列表),因为它是在没有任何关于将放入的对象数量的数据的情况下进行初始化的。

然而,例如,intdouble具有固定数量的内存并不是很有意义,因为您经常放置对象在里面。 push命令是否会增加堆栈的内存分配?

我认为它被放置在'堆中。存储器?

谢谢!

3 个答案:

答案 0 :(得分:1)

我在C#讲话,所以请耐心等待;无论何时为局部变量分配内存,它都会在堆栈上分配,堆用于对象之类的东西,它分配对象的引用然后分配实际对象,然后垃圾收集器使用对象引用来完成弄清楚需要清理哪些物体以及哪些物体不需要清理。

在这种情况下,我相信你是在堆上分配对象,因为所有的"堆栈"对象是,是一个filo数据结构。

Java中的堆栈只存储本地范围内存在的基元,因此Java中的堆栈大小通常很小,但是大小取决于几个因素并且在运行时是可变的,例如,初始大小通常基于编译器认为需要运行多少内存,然后随着它的增长它将增加大小(我认为Windows例如增加了堆栈的页面,这是256字节的内存,但是不要让我这么做。)

在您的情况下,由于您询问的是未初始化堆栈对象的初始大小,因此大小是堆栈对象的大小,并且在向其添加元素时会发生更改。

希望有所帮助。

答案 1 :(得分:0)

Stack extends VectorStack()隐式调用Vector(),使用a default initial capacity of 10

答案 2 :(得分:0)

Stack继承自Vector。 Vector的默认构造函数初始化一个大小为10的数组。