Java 函数本地声明的数组将在内存中的什么位置?

Java 函数本地声明的数组将在内存中的什么位置?,java,arrays,Java,Arrays,我读到局部变量在堆栈内存中,数组保存在堆内存中。那么,如果我声明了一个块或函数的局部数组呢?该数组保存在哪里?请帮助我理解。数组存储在堆中。我不相信逃逸分析可以像某些对象那样在堆栈上分配它 对数组的引用可能在堆栈上。数组存储在堆中。我不相信逃逸分析可以像某些对象那样在堆栈上分配它 对数组的引用可能在堆栈上。不要将数组与对数组的引用混淆,这是您在方法体中声明的内容。引用位于方法调用框架内(“在堆栈上”),但数组本身是动态分配的,就像Java中的其他所有内容一样。JIT编译器可能会得出结论,直接在堆

我读到局部变量在堆栈内存中,数组保存在堆内存中。那么,如果我声明了一个块或函数的局部数组呢?该数组保存在哪里?请帮助我理解。

数组存储在堆中。我不相信逃逸分析可以像某些对象那样在堆栈上分配它


对数组的引用可能在堆栈上。

数组存储在堆中。我不相信逃逸分析可以像某些对象那样在堆栈上分配它


对数组的引用可能在堆栈上。

不要将数组与对数组的引用混淆,这是您在方法体中声明的内容。引用位于方法调用框架内(“在堆栈上”),但数组本身是动态分配的,就像Java中的其他所有内容一样。JIT编译器可能会得出结论,直接在堆栈上分配一个小数组是值得的,但这属于“高级”类别,当然不在您的控制范围之内。

不要将数组与对数组的引用混淆,这是您在方法体中声明的内容。引用位于方法调用框架内(“在堆栈上”),但数组本身是动态分配的,就像Java中的其他所有内容一样。JIT编译器可能会得出结论,直接在堆栈上分配一个小数组是值得的,但这属于“高级”类别,肯定超出了您的控制范围。

我认为堆栈分配小数组实际上有一个阈值。@MarkoTopolnik我刚刚尝试了1、4和8字节数组,但没有成功。我知道瓦拉格人可以被淘汰,但我认为这是不同的。我对它有一个模糊的记忆,所以我很可能是错的。它可能是在一个关于未来实施的提案中。@MarkoTopolnik也可能是我没有做经过优化的确切选项。找到一个简单的例子可能很难,它不仅会消除死代码,而且非常简单,可以进行优化。我认为堆栈分配小数组实际上有一个阈值。@MarkoTopolnik我刚刚尝试了1、4和8字节数组,但运气不好。我知道瓦拉格人可以被淘汰,但我认为这是不同的。我对它有一个模糊的记忆,所以我很可能是错的。它可能是在一个关于未来实施的提案中。@MarkoTopolnik也可能是我没有做经过优化的确切选项。很难找到一个简单的示例,它不仅会消除死代码,而且足够简单,可以进行优化。动态分配?我认为数组也被称为“静态数据结构”。所以它的大小是预先定义好的。正当您的意思是,内存位置是动态分配的吗?保存数组内容的内存块是动态分配的。数组的大小不是静态确定的,它在运行时是一个动态参数。您想到的是数组无法调整大小。是否动态分配?我认为数组也被称为“静态数据结构”。所以它的大小是预先定义好的。正当您的意思是,内存位置是动态分配的吗?保存数组内容的内存块是动态分配的。数组的大小不是静态确定的,它在运行时是一个动态参数。您想到的是数组不能调整大小。