5
A
回答
4
引用類型在堆中。
任何原始類型數據和對堆上的值(方法的參數/局部變量)的引用都在堆棧上。
每個線程都有自己的堆棧。
應用程序中的所有線程共享相同的堆。
3
這真的很容易:
- 對象(即類的實例)是總是在堆上。他們不能在其他地方
- 字段是對象的一部分,所以他們也住在堆上。
- 局部變量(包括方法/構造函數)參數是總是在棧上。他們不能在其他地方。
注意局部變量只有保持引用(「指針」)或原始數值。局部變量永遠不能容納「一個對象」。
請注意,這個視圖是在JVM規範中定義的。如果需要,具體的JVM可以在非堆區域中分配對象。例如:如果它知道新創建的對象永遠不會轉義當前的調用,那麼它可以將實例化的對象放入堆棧區域。但是,這是開發人員不可見的優化。
0
0
@Joachim紹爾
如果你說的是真的,那麼爲什麼,在下面的代碼,
class Student{
int age; //instance variable
String name; //instance variable
public Student()
{
this.age = 0; //local variable and member of an object
name = "Anonymous";
}
那麼,爲什麼不是「NAME = 「無名氏」; '一個局部變量? 它是什麼類型的變量,它住在哪裏?
相關問題
- 1. JVM堆棧變量
- 2. JVM堆棧存儲器
- 3. 堆棧幀和堆棧指針
- 4. 希望堆棧堆棧?
- 5. 堆棧或堆
- 6. DFS和堆棧
- 7. 字符堆棧,字符串堆棧,整數堆棧,整數數組堆棧等
- 8. 塊+ ARC,堆棧和堆
- 9. 線程堆和堆棧
- 10. 堆棧和堆查看器
- 11. 堆棧
- 12. 堆棧
- 13. 什麼「堆棧無效,堆棧只支持堆棧1和堆棧5」是什麼意思?
- 14. 堆棧搜索導致堆棧溢出
- 15. 堆棧= java.lang.StackOverflowError的:堆棧大小8MB
- 16. getaddrinfo addrinfo導致堆棧或堆棧
- 17. Python堆棧爲堆棧格式
- 18. 堆棧或堆棧分配不正確
- 19. 棧和堆內存
- 20. 比較和堆棧
- 21. 頭和尾堆棧
- 22. JVM只是映射堆棧頁嗎?
- 23. 堆棧VS堆帶類
- 24. C++堆棧與堆分配
- 25. 倒車堆棧
- 26. 堆棧溢出
- 27. 從堆棧
- 28. 攻擊堆棧
- 29. 慢Rails堆棧
- 30. 堆棧glGetTexImage
@Nirmal:沒什麼奇怪的。無論是C/C++運行時還是其他方式,它在所有運行時都是相同的行爲。所以,我不太明白「爲什麼」這個「爲什麼」從你身邊:) – 2010-05-13 11:18:24
「任何原始類型的數據......都在堆上」有點令人困惑。如果堆是對象的數據成員,堆就會存儲基元。 – 2010-05-13 12:30:56
是的。它的確如..但是,正如你所提到的,作爲複合材料的一部分。然而,當我們訪問數據時,它首先被複制到堆棧上。例如,對於具有定義ComplexNumber {float real,float imaginary}的對象,在doWork(ComplexNumber cn){返回cn.real * cn.real + float.imaginary * float。假想; } 首先將實數/虛數值帶入堆棧unline cn,其中僅將參考引入堆棧 – 2010-05-14 10:26:27