7

我只是好奇。
假设我在 while/for 循环中定义了一个引用。

JVM 是每次迭代都定义这个引用,还是优化为只定义一次?

4

4 回答 4

7

它定义了每次,并仅限于该循环迭代。

一旦循环迭代完成,它就有资格进行 GC。

正如 Louis Wasserman 评论的那样,该变量每次都会重新初始化,但内存空间可能会被重用。

于 2012-10-12T18:23:21.503 回答
4

每次迭代都会定义引用。一旦代码优化为本机代码,就可以将其移到循环之外,因此不必对性能产生影响。如果您每次都将此引用设置为一个new对象,则它可能会在每次迭代时创建一个新对象,除非该对象的创建也已被优化掉。

于 2012-10-12T18:29:18.790 回答
2

它每次都定义。没有优化(据我所知)。

于 2012-10-12T18:24:49.120 回答
1

-每次循环迭代时定义引用,但引用的范围仅附加到该迭代。

-假设您在循环外声明了一个引用,但在循环为其分配了对象,则引用保持不变,但它在每次迭代中引用该类型的新对象。

于 2012-10-12T18:27:27.440 回答