是一個「靜態最終」直接分配到年輕的gen或老gen或perm gen嗎? (我想這很可能會在我想象的時間內落入舊有的)。如果它被分配在燙髮中,那麼當在彼爾姆根課堂卸載時它會被垃圾收集嗎?哪裏做了一個「靜態final」直接分配進去?年輕的gen或老gen或perm gen?
2
A
回答
5
是一個「靜態最終」直接分配到年輕的gen或老gen或perm gen嗎?
由static final
變量引用的對象將根據與任何其他對象相同的規則進行分配。最有可能分配給年輕一代或老一代(如果規模較大且適用其他某些條件)。
該對象將被分配new
執行在一些任意代碼。 JVM無法知道該對象將(最終)被分配給一個static final
變量。
包含靜態變量的幀的空間可能分配在permGen中。當然,這不是一個普通的Java對象。
如果它是在perm gen中分配的,那麼當在Perm Gen上的類卸載發生時它會被垃圾收集嗎?
這取決於permGen是否被垃圾收集。在現代的JVM中,我期望被卸載的類靜態引用的對象將被垃圾收集到同一個GC循環中,或者下一個......假設它們無法訪問。
無論哪種方式,您都不應該編寫您的應用程序來依賴任何這些細節。它們是JVM特定的。
+2
+1「無論哪種方式,你都不應該編寫你的應用程序來依賴任何這些細節,它們是特定於JVM的。」靜態最終,意味着它是靜態的和最終的。似乎有危險承擔更多... – bwawok 2010-09-27 03:27:20
相關問題
- 1. PS Perm Gen && Perm Gen JVM PROPERTIES?
- 2. JRuby JMX Perm Gen Value
- 3. 內存不足:Perm Gen Space
- 4. 面向weblogic中的perm gen space錯誤
- 5. JVM YoungGen 0%,Perm Gen 99%,OldGen Full
- 6. 何時gen 0,gen 1,gen 2準確觸發?
- 7. 在年輕的gen GC中存活的物體的百分比?
- 8. Gen Server Error noproc
- 9. Intellij android資源gen
- 10. API Gen與NetBeans 7.2.1
- 11. While Loop和gen rand()
- 12. Scala類定義對perm gen空間的影響
- 13. 將Java ClassLoaders添加到堆而不是perm gen
- 14. src/com.app.main && gen/com.app.main是同一個包嗎?
- 15. Modelsim在一個gen實例上中斷
- 16. 舊gen填充在一個節點
- 17. 非堆CMS CMS上的DSE垃圾收集Perm Gen花了很長時間
- 18. 除了Class對象之外,還存儲在Perm Gen Space(sun 1.6 VM)中?
- 19. /obj-c/target/enunciate/gen /下的源文件來自哪裏?
- 20. .xsd數據集的代碼gen模板在哪裏?
- 21. Java守護進程線程是否與生成進程共享堆或者Perm Gen?
- 22. Android缺少Gen文件
- 23. seam-gen vs eclipse seam web project
- 24. terrain gen python約束條件
- 25. protoc-gen-javanano沒有找到
- 26. gen update rake -bash:gen:command not found
- 27. 靜態變量是否在堆上的永久gen空間上
- 28. 像Seam-Gen一樣的春季開發
- 29. 當分叉時,子JVM會「繼承」最大堆大小和perm gen大小嗎?
- 30. 蓋茨比靜態網站gen。 &發佈新內容
除非以調試模式運行,否則無法卸載類,因此靜態最終聲明從不會被JVM收集垃圾,直到應用程序結束。 – 2010-09-27 00:36:54
@Yanick - 實際上,使用'Class.forName()'加載的任何類都可能變得無法訪問,並且會受到卸載/垃圾回收......取決於JVM選項。 – 2010-09-27 01:44:45
@Stephen C,真實。然而,這是假定這個類實際上是GC的候選者,並且JVM被設置爲允許它。在大多數情況下,它不會發生。但我想我現在要脫離主題... – 2010-09-27 02:26:39