当前位置: 首页 > 面试题库 >

Java可以在堆栈上分配列表吗?

邢博学
2023-03-14
问题内容

每当我在Java中启动列表时,我都会

List<Integer> list = new LinkedList<>();

我假设这将在堆上分配列表。不知道我是否可以在堆栈上分配列表?


问题答案:

所有对象(包括其各个属性)都存储在堆中。

所有局部变量及其参数都存储在堆栈中,因为它们包含原始值或引用。

但是,在特殊情况下,java虚拟机可能会执行转义分析并决定LinkedList在堆栈上分配对象(包括your ),但这通常不会发生,也不是主要问题。

通常,如果在堆栈上分配对象,则在调用引用该对象的函数时会得到该对象的副本。相反,如果您在堆上分配一个对象,则将指针传递给该对象时,您将获得该指针的副本(指向该堆上的同一对象)。



 类似资料:
  • 问题内容: 由于Java6周围的某个地方,热点JVM可以进行转义分析并在堆栈上而不是在垃圾收集堆上分配非转义的对象。这样可以加快生成代码的速度,并减少垃圾收集器上的压力。 Hotspot能够堆叠分配对象的规则是什么?换句话说,什么时候可以依靠它进行堆栈分配? 编辑 :该问题是重复的,但是(IMO)与原始问题相比,以下答案是一个更好的答案。 问题答案: 我做了一些实验,以查看Hotspot何时可以堆

  • 问题内容: 是局部变量,将其存储在堆或堆栈中的何处? 问题答案: 在堆上。每当您用来创建对象时,它都会在堆上分配。

  • 问题内容: 我对Java不太了解。 我浏览了几个链接,发现博客上写着“ Java Primitives存储在堆栈上”,我觉得这取决于实例变量或局部变量。 经过几个链接后,我的结论是, 类变量(基元)作为对象包含的对象的一部分存储在堆中。 类变量– object(用户定义)–作为其包含的Object的一部分存储在堆中。对于参考对象和实际对象都是如此。 方法变量-基元-作为该堆栈框架的一部分存储在堆栈

  • Stack类 栈:(水杯喝水,先进后出) 栈是一种数据结构,是只能在某一端插入和删除的特殊线性表。他按照先进后出的原则存储数据 Enumeration(枚举) hasMoreElements() 测试此枚举是否包含更多的元素 nextElements() 如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素 代码演示: package day07; import java.util.D

  • 我使用的是Java,我有一个节点列表,我需要在堆栈上按照从最后一个到第一个的顺序使用List。 例: 我的列表是{node1, node2, node3} 我的堆栈应该是 { 节点1, 节点2, 节点 3 } 我如何轻松解决这个问题? 这行得通吗?

  • 我一直在试图弄清楚什么时候事情会在堆栈上分配,但我不知道如何让数组(或者更确切地说是数组中的值)在堆栈上分配; 在此示例中: 10个int结构将分配在堆上,只有指向它们的指针将在堆栈上,对吗? 如何制作固定大小的数组以进行堆栈?如果我使用我定义的stucts怎么办? 如果我想数组大小作为参数传递给函数怎么办? 据我所知,如果调用函数时知道大小,那么在调用函数时在堆栈上获取任意大小的数组应该没有问题