將任何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