2012-07-31 116 views
1

将任何OOPs语言引用为像java和c#这样的基本结构。对象的堆栈上或堆栈上的隐藏成员?

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

所以这样的:

class B 
{ 
... 
} 

class A 
{ 
    int a; 
    B b; 
} 

是A.A是在栈或堆上?

+0

http://stackoverflow.com/questions/3646632/does-the-java-primitives-go-on-the-stack-or-the-heap看到这个答案 – 2012-07-31 08:27:53

回答

1

最基本的答案是,所有的局部变量是在栈上和其他一切是在堆上。然而,如Java 7的编译器将执行被称为技术逃逸分析,它检查是否有物体被严格使用的方法中(并且不逃逸该方法),并在发现这样一个对象,将分配它的存储在堆栈上。此行为是在Java 6, Update 14中引入的,但未默认激活。

这一点,因为许多其他的例子,说明你是Java语言规范是一回事,实现另一种。只要实现的行为如JLS所定义的那样,它就是合法的。

0

只有局部变量都存储在堆栈中,别人都在堆。