将任何OOPs语言引用为像java和c#这样的基本结构。对象的堆栈上或堆栈上的隐藏成员?
快速执行,它们还支持基本类型如int和焦炭。 我认为这是通过将它们存储在堆栈上来完成的。 和堆上的对象类型。
所以这样的:
class B
{
...
}
class A
{
int a;
B b;
}
是A.A是在栈或堆上?
将任何OOPs语言引用为像java和c#这样的基本结构。对象的堆栈上或堆栈上的隐藏成员?
快速执行,它们还支持基本类型如int和焦炭。 我认为这是通过将它们存储在堆栈上来完成的。 和堆上的对象类型。
所以这样的:
class B
{
...
}
class A
{
int a;
B b;
}
是A.A是在栈或堆上?
最基本的答案是,所有的局部变量是在栈上和其他一切是在堆上。然而,如Java 7的编译器将执行被称为技术逃逸分析,它检查是否有物体被严格使用的方法中(并且不逃逸该方法),并在发现这样一个对象,将分配它的存储在堆栈上。此行为是在Java 6, Update 14中引入的,但未默认激活。
这一点,因为许多其他的例子,说明你是Java语言规范是一回事,实现另一种。只要实现的行为如JLS所定义的那样,它就是合法的。
但对于的Java6有堆栈中创建对象时的情况。
证明:http://docs.oracle.com/javase/specs/jvms/se5.0/html/Concepts.doc.html#29375
只有局部变量都存储在堆栈中,别人都在堆。
http://stackoverflow.com/questions/3646632/does-the-java-primitives-go-on-the-stack-or-the-heap看到这个答案 – 2012-07-31 08:27:53