【发布时间】:2017-07-07 12:51:38
【问题描述】:
假设我们有一个实例引用变量分配给一个对象。
public class Player {
private Object object = new Object();
}
每当我创建一个新的 Player 实例时。
Player player = new Player();
据我所知,可能是错的,我对此很陌生。堆为实例原语变量分配内存并将它们存储在对象中。
如果它对分配给对象的实例引用变量做同样的事情,这不是立即创建一个新实例还是仅在调用引用变量时发生?
【问题讨论】:
-
在java中,对象存储在堆中,指针(位置的地址)被分配到堆栈中的一个位置。
-
Java 会在看到“new”关键字后为实例分配内存,并使用容器对象更新引用。更多信息docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/…
-
与stackoverflow.com/questions/8588152、stackoverflow.com/questions/6396440、stackoverflow.com/questions/19402207 重复。简而言之,取决于 JVM 以及逃逸分析是否允许在堆栈上分配。
-
我会读到@sanojmathew 谢谢!我不是在谈论局部变量 Njol,只是不确定对象是否是在创建类的新实例时创建的(分配的实例引用所属)
-
@JobinJohnson:不,这过于简单化了。特别是,
object字段(因为它是对象的一部分)在堆上,而不是在堆栈上。
标签: java