【发布时间】:2011-03-29 08:09:13
【问题描述】:
void someMethod() {
byte[] array = { 0, 0 };
}
这个数组是存放在堆上还是栈上?
【问题讨论】:
标签: java arrays heap-memory stack-memory
void someMethod() {
byte[] array = { 0, 0 };
}
这个数组是存放在堆上还是栈上?
【问题讨论】:
标签: java arrays heap-memory stack-memory
您可以认为它总是在堆上。
我相信一些智能 VM 能够在检测到对象安全的情况下对对象进行堆栈分配 - 但从概念上讲,它是在堆上的。特别是所有数组类型都是引用类型(即使元素类型是原始的),所以array变量(在栈上)只是对对象的引用,对象通常在堆上。
特别是,想象一个小的变化:
byte[] someMethod() {
byte[] array = { 0, 0 };
return array;
}
如果数组是在栈上分配的,返回的引用必须引用什么?
【讨论】:
它将存储在堆中
【讨论】: