循環中的變數在每次循環後都會被回收嗎
比如
for (int i=0;i<1000000;i++){ Date date=new Date(); }
這個date沒有被引用,這樣會被垃圾回收嗎?如果創建物件被引用,結果又是怎樣的了?
java的GC有YGC和FGC。 你這裡沒有被引用的date物件一定會被回收,但不是在每次循環結束後。 GC的時機和你的程式碼執行沒有必然連結。 相關知識,你可以baidu下java GC
這個問題的答案在於,jvm的垃圾回收機制在什麼情況下會進行垃圾回收。 局部變數的作用於是{},也就是說,date沒有被引用了,當執行垃圾回收動作的時候,這裡的date就會被回收。
new一個對象,那麼就是存放在堆中,而且剛創建的對象存放在eden區中,只有當eden區滿了,才會觸發Monitor GC進行回收。 你可以在運作參數中加入-XX:+PrintGCDetails觀察GC回收的情況。
-XX:+PrintGCDetails
java的GC有YGC和FGC。
你這裡沒有被引用的date物件一定會被回收,但不是在每次循環結束後。
GC的時機和你的程式碼執行沒有必然連結。
相關知識,你可以baidu下java GC
這個問題的答案在於,jvm的垃圾回收機制在什麼情況下會進行垃圾回收。
局部變數的作用於是{},也就是說,date沒有被引用了,當執行垃圾回收動作的時候,這裡的date就會被回收。
new一個對象,那麼就是存放在堆中,而且剛創建的對象存放在eden區中,只有當eden區滿了,才會觸發Monitor GC進行回收。
你可以在運作參數中加入
-XX:+PrintGCDetails
觀察GC回收的情況。