对象的私有成员是堆还是堆栈?

时间:2012-07-31 08:25:48

标签: java .net oop class

将任何OOP语言作为基本结构(如java和c#。

)引用

为了快速执行,它们还支持int和char等基本类型。 我认为这是通过将它们存储在堆栈中来完成的。 和堆上的对象类型。

所以对此:

class B
{
 ...
}

class A
{
   int a;
   B b;
}

A.a是堆栈还是堆栈?

3 个答案:

答案 0 :(得分:1)

  • 类对象,包括方法代码和静态字段:heap。
  • 对象,包括实例字段:heap。
  • 局部变量和对方法的调用:stack

但是对于java6,有些情况是在堆栈上创建对象。

证明:http://docs.oracle.com/javase/specs/jvms/se5.0/html/Concepts.doc.html#29375

答案 1 :(得分:1)

基本答案是所有局部变量都在堆栈上,其他所有变量都在堆上。但是,从Java 7开始,编译器将执行称为 Escape analysis 的技术,该技术检查对象是否严格地在方法中使用(并且转义该方法)并且在找到这样的对象时,将在堆栈上分配其存储。此行为是Java 6, Update 14引入的,但默认情况下未激活。

正如许多其他示例所示,这向您展示了Java语言规范是一回事并实现另一个。只要实现的行为与JLS定义的一样,它就是合法的。

答案 2 :(得分:0)

只有局部变量存储在堆栈中,其他变量存储在堆中。