对象存储在堆中,当它是一个类实例变量,并在堆栈中时,它是一个函数变量?那是对的吗?存储对象实例在哪里?
回答
引用存储在堆栈(不是全部,虽然情况)
注:只有局部变量。对于实例和类变量,它们是对象的一部分,因此也是堆。
虽然对象存储在堆上。
- 类对象,包括方法代码和静态字段:堆。
- 对象,包括实例字段:堆。
- 局部变量和调用方法:堆栈
非常真实..所以它意味着他们将被存储在堆 – BlackFire27 2012-02-27 07:11:54
不。值类型有些古怪(它们仍然是对象,但通常可以在堆栈中找到)。 – cHao 2012-02-27 07:13:43
看看我已经更新了答案...... – 2012-02-27 07:18:19
栈是地方的方法和局部变量存储。
堆是存储对象及其实例变量的存储位置。
现在实例变量是任何变量,没有“静态”字段修饰符,它们是在类主体内部以及任何类的方法主体之外定义的。
只要它们的封闭对象在范围内,实例变量就在范围内。实例变量是包含它的对象的一部分,不能独立于它。
希望所以它会清除你的概念。
存储对象的位置是实现细节。依靠它自己的危险。 – cHao 2012-02-27 07:12:21
@cHao:的确如此。我不知道.Net的引擎,但Google的V8 JavaScript引擎(JavaScript是另一个垃圾回收环境)足够聪明,可以对代码进行静态分析,并确定对象只在函数中使用,然后才会发布 - 并将它们放在堆栈上,以便在返回时立即回收。 – 2012-02-27 07:31:28