如果我在Java中創建一個靜態變量,它會自動進入堆中的perm gen空間嗎?似乎很明顯,答案是肯定的,但我無法在任何地方找到確認。 我知道靜態變量(也是字符串和枚舉)在JVM的生命中是活着的,所以它必須放在永久堆中。它是否正確?可以在線程之間共享靜態變量是否在堆上的永久gen空間上
1
A
回答
0
存儲器被稱爲共享存儲器或堆存儲器。
所有實例字段,靜態字段和數組元素都存儲在堆內存中。在本章中,我們使用術語變量來指代字段和數組元素。局部變量(第14.4節),形式方法參數(第8.4.1節)或異常處理程序參數永遠不會在線程之間共享,並且不受內存模型的影響。這裏
尼斯描述通過@Stephen:static allocation in java - heap, stack and permanent generation
2
的「PermGen的」的想法是完全依賴於實現和JVM中可以自由地處理了「物理」內存管理不過是有道理的them--他們甚至不需要提供垃圾收集!
PermGen只是一些JVM實現(包括Sun/Oracle HotSpot JVM多年)的一個特性,實際上它正在Oracle Java 8 JVM中採用新方法取消。包含PermGen概念的JVM很可能會將靜態變量放在那裏用於性能,但完全取決於程序員。
相關問題
- 1. 爲堆棧上的靜態變量分配空間
- 2. 永久更改靜態值
- 3. 堆上的對象的成員變量是否也自動堆在堆上?
- 4. 靜態VS在命名空間的非靜態變量
- 5. 使用CClientDC在靜態控件上繪製永久圖片
- 6. 永久PHP變量
- 7. 永久PowerShell變量
- 8. 命名空間中的靜態變量
- 9. S3上的Django靜態文件:S3ResponseError:301永久移動
- 10. filterFunction是否永久?
- 11. 名稱空間上的變量是否總是有默認值?
- 12. 命名空間(靜態)成員變量
- 13. C++命名空間和靜態變量
- 14. Rails中的永久變量
- 15. 在對象之間是否存在靜態局部變量?
- 16. 在非靜態類中鎖定靜態變量是否安全?
- 17. 在Mac OS上設置永久環境變量X
- 18. 永久更改變量
- 19. 永久更新$ PATH變量
- 20. Matlab變量永久保存
- 21. 永久環境變量
- 22. Asp.Net/C#靜態變量持久性
- 23. vb.net網上花園的靜態變量
- 24. 是否繼承了靜態變量
- 25. 靜態constexpr變量是否有意義?
- 26. 是否可以在幻燈片上設置永久圖像
- 27. iframe上的持久變量?
- 28. java.lang.OutOfMemoryError:EntitySave上的Java堆空間
- 29. java.lang.OutOfMemoryError:com.sun.crypto.provider.CipherCore.update上的Java堆空間
- 30. 變量永久性是否可用於Ruby?
未來,請閱讀[本文](http://javaeesupportpatterns.blogspot.ca/2013/02/java-8-from-permgen-to-metaspace.html)。 –
這取決於JVM的實現,它是如何顯而易見的? – rocketboy
確保區分*變量*和變量是否爲引用變量,它指向的是哪個對象。爲了引用,對象將被分配到對象被分配的地方。至於靜態變量的存儲位置,它可能會分配在與Class對象的其餘部分相同的一般區域中。 (但是請注意,這可能實際上不在GCed堆中。) –