Java 堆栈对象在创建时分配了多少内存?

Java 堆栈对象在创建时分配了多少内存?,java,memory,stack,Java,Memory,Stack,我想知道-在通过stack类定义新堆栈时 Stack stack=new Stack(); 分配给它多少内存?它不能依赖于N个对象的数量(例如,数组和列表),因为它在初始化时没有任何关于将放置在其中的对象数量的数据 然而,它也没有太多的意义,它会有一个固定的内存量,比如int或double,因为您经常在其中放置对象。 push命令是否增加堆栈的内存分配 我假设它被放在“堆”内存中 谢谢 堆栈扩展了Vector,并隐式调用Vector(),它使用。堆栈继承自Vector。Vector的默认构造函

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

Stack stack=new Stack();
分配给它多少内存?它不能依赖于N个对象的数量(例如,数组和列表),因为它在初始化时没有任何关于将放置在其中的对象数量的数据

然而,它也没有太多的意义,它会有一个固定的内存量,比如
int
double
,因为您经常在其中放置对象。
push
命令是否增加堆栈的内存分配

我假设它被放在“堆”内存中


谢谢

堆栈扩展了Vector
,并隐式调用
Vector()
,它使用。

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

我是从C#说起的,请耐心听我说;每当您为局部变量分配内存时,它都会在堆栈上分配,堆是为对象之类的对象分配的,它先为对象分配一个引用,然后为实际对象分配一个引用,然后垃圾收集器使用对象引用遍历并找出哪些对象需要清理,哪些对象不需要清理

在本例中,我相信您是在堆上分配对象,因为所有“stack”对象都是filo数据结构

Java中的堆栈只存储存在于本地范围内的原语,因此Java中的堆栈大小通常非常小,但是大小取决于多个因素,并且在运行时是可变的,例如,初始大小通常根据编译器认为需要运行的内存量来计算,然后随着它的增长,它的大小也会增加(例如,我认为Windows会以页为单位增加堆栈,即256字节的内存,但不要让我这么认为。)

在本例中,由于您询问的是未初始化堆栈对象的初始大小,因此该大小就是堆栈对象的大小,并且随着您向其添加元素而改变


希望这会有所帮助。

因此,您会将堆栈的空间复杂度定义为O(1)还是O(n)?它是O(n),因为随着添加更多元素,内部容量必须增加。请查看java中对象的内存使用情况。