2012-07-31 95 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

只有局部變量都存儲在堆棧中,別人都在堆。