2012-02-27 170 views
0

对象存储在堆中,当它是一个类实例变量,并在堆栈中时,它是一个函数变量?那是对的吗?存储对象实例在哪里?

+1

存储对象的位置是实现细节。依靠它自己的危险。 – cHao 2012-02-27 07:12:21

+0

@cHao:的确如此。我不知道.Net的引擎,但Google的V8 JavaScript引擎(JavaScript是另一个垃圾回收环境)足够聪明,可以对代码进行静态分析,并确定对象只在函数中使用,然后才会发布 - 并将它们放在堆栈上,以便在返回时立即回收。 – 2012-02-27 07:31:28

回答

0

引用存储在堆栈(不是全部,虽然情况)

注:只有局部变量。对于实例和类变量,它们是对象的一部分,因此也是堆。

虽然对象存储在堆上。

  • 类对象,包括方法代码和静态字段:堆。
  • 对象,包括实例字段:堆。
  • 局部变量和调用方法:堆栈
+0

非常真实..所以它意味着他们将被存储在堆 – BlackFire27 2012-02-27 07:11:54

+0

不。值类型有些古怪(它们仍然是对象,但通常可以在堆栈中找到)。 – cHao 2012-02-27 07:13:43

+0

看看我已经更新了答案...... – 2012-02-27 07:18:19

2

栈是地方的方法和局部变量存储。

堆是存储对象及其实例变量的存储位置。

现在实例变量是任何变量,没有“静态”字段修饰符,它们是在类主体内部以及任何类的方法主体之外定义的。

只要它们的封闭对象在范围内,实例变量就在范围内。实例变量是包含它的对象的一部分,不能独立于它。

希望所以它会清除你的概念。

+0

没有清理我的。它似乎只是回答一切,但实际的问题。 – cHao 2012-02-27 07:18:18

+0

哪部分未清除? – Java 2012-02-27 07:20:02

+0

实际上是在问题的部分? :P你周围有点跳舞,画出各种漂亮的点,但你并没有真正想过以真正回答问题的方式连接它们。 – cHao 2012-02-27 07:22:41