关于'new'关键字的Java内存问题

Roh*_*wal 8 java memory heap stack

如果您运行以下代码会发生什么?

while (true) {
    String x = new String("ABC");
}
Run Code Online (Sandbox Code Playgroud)

在记忆方面?

字符串x是在堆栈上还是在堆上分配的?由于内存溢出,程序最终会崩溃,还是垃圾收集会阻止它?new关键字是否始终在堆上创建对象?何时在堆栈上创建对象?

谢谢!

use*_*421 7

字符串x是在堆栈上还是在堆上分配的?

x不是String.它是对a的引用String.引用是一个局部变量,因此在堆栈上.这String是一个对象,所以在堆上.

由于内存溢出,程序最终会崩溃吗?

可能不是.

或垃圾收集会阻止吗?

这应该.

new关键字是否始终在堆上创建对象?

是.

何时在堆栈上创建对象?

从不...除非JVM决定它无法逃避当前范围,因此决定这样做.