【发布时间】:2014-06-10 00:20:10
【问题描述】:
每当我在java中启动一个列表时,我都会这样做
List<Integer> list = new LinkedList<>();
我假设这将在堆上分配列表。想知道我是否可以在堆栈上分配列表?
【问题讨论】:
-
为什么要在栈上分配?
-
这纯粹是学术性的吗?
-
@LuiggiMendoza PermGen 不是堆栈内存。它是为 JVM 进程的其余部分分配预期存在的类和其他结构的地方;将这些移动到单独的空间使常规堆中的垃圾收集更加有效。随着类卸载变得越来越常规,这种效率提升变得不那么明显了。
-
list在堆栈上,但这是一个引用,实际对象在堆上。 -
@PeterLawrey 但前提是它是局部变量。如果它是一个成员变量,它也会在堆上。
标签: java heap-memory stack-memory