我是GC的新手,想知道垃圾收集器除了引用之外還收集了哪些不再被任何變量引用的東西?以下是我想查看的列表Java:什麼是垃圾收集器收集?
- 原始類型(int,double,float,char ....)是否得到GC編輯?
- 靜態變量是否得到GC-ed?
- 最終變量是否得到GC-ed(我認爲,因爲它被標記爲不可變,所以沒有東西要收集)?
- 是否所有的方法(包括靜態和非靜態)都得到GC編輯?
- 線程是否被GC編輯?
我是GC的新手,想知道垃圾收集器除了引用之外還收集了哪些不再被任何變量引用的東西?以下是我想查看的列表Java:什麼是垃圾收集器收集?
GC不收集任何引用,它只是釋放無法訪問的對象(堆上的內存)。
靜態是特殊的內存位置並與類/類加載器相關聯。如果class/classloader未部署,則靜態內容將從內存中移除。
原始類型如果與對象(類變量)相關聯,那麼當對象不可達時它們將被GCed。
如果局部變量/參數變量,它們將在堆棧上,所以只要方法執行完成,它們就會被回收。
當方法返回時,本地變量將被回收。即基元和參考。只有對象是GC編輯的。 – 2012-08-07 21:28:50
*變量*是靜態的,而不是被引用的對象。否則,如果對象從非靜態變量重新分配給靜態變量,則對象將不得不將其更改爲「類型」。 (它可以同時分配給靜態,非靜態和易失性變量,btw) – 2012-08-07 21:31:58
垃圾回收僅適用於對象。
•原始類型(int,double,float,char ....)是否得到GC編輯? - 是原始類型的對象?沒有。
•靜態變量是否被GC編輯? - 是變量對象,是的。
•最終變量是否得到GC-ed(我認爲,因爲它被標記爲不可變,所以沒有東西可以收集)? - 沒有它們將得到GC編輯
•是否所有的方法(靜態和非靜態)都得到GC編輯? - 方法和類defs需要內存,但不是由GC管理的內存,它取決於它們隨意創建和銷燬的JVM類型。
•線程是否得到GC編輯? - 是的線程是對象,所以他們得到GC編輯。
垃圾收集器只能在堆上工作。鑑於此,您可以排除靜態變量。
原始類型(int,double,float,char ....)得到GC-ed嗎? 如果它們所屬的對象得到GC編輯,它們將得到GC編輯
靜態變量是否得到GC編輯? 沒有
做最後的變量得到GC編輯(我認爲,因爲它被標記爲不可變的,所以沒有什麼收集)? 如果它們所屬的對象得到GC編輯,它們將得到GC-ed
是否所有方法(包括靜態和非靜態)都得到GC編輯? 這並沒有太大的意義
線程得到GC編輯? 如果它們是不再被引用的對象,是
垃圾收集不上堆上分配對象,這是通過new
創建的所有對象。
new Integer(..)
管理,但我不知道有關裝箱和拆箱這裏,所以我說沒有,因爲JVM已經對它們進行管理run()
方法,使他們能夠GCed通過'new'創建的對象....怎麼樣字符串文字? – peter 2012-08-07 21:17:21
GC只收集沒有在程序中的任何引用,以便由定義收集由GC原語不能發生存儲空間中的對象。 任何可以引用一個對象並可以改變其需求的變量都可以被收集,所以在一些情況下可以收集靜態變量,但是總決賽不會! 我無法想象你用什麼方法GC-ed.in一般的答案我應該說方法不是對象狀態的一部分GC-ed。
垃圾回收是一個巨大的話題,對於堆棧溢出回答可能太大了。這個主題上有一個good book,被稱爲Garbage Collection Handbook。
你可能已經把你的問題分解成了你寫的5個重點,並且在每一個問題上都找到了幾個Q&A,但你可能想讀的是這個http://chaoticjava.com/posts/how -does-garbage-collection-work/ – Ozzy 2012-08-07 21:04:58