HashMap与垃圾回收
今天在看Java核心技術(shù)1的時(shí)候看到HashMap的對象,書中講到:?
1.如果有一個(gè)值,對應(yīng)的鍵不再使用他了,但由于key與value之間存在強(qiáng)引用,是不會(huì)被垃圾回收的?
2.垃圾回收器跟蹤活動(dòng)的對象,只要映射對象是活動(dòng)的,其中的所有桶也是活動(dòng)的,它們不能被回收?
所以做了下面的測試:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
測試結(jié)果:?
?
果然,GC不會(huì)回收這兩個(gè)垃圾,這個(gè)跟Java中的HashMap默認(rèn)是強(qiáng)引用有關(guān)的
分析:?
愿意:其實(shí)HashMap存進(jìn)去的是t1跟t2指向的地址(堆內(nèi)存中兩條黑色的線)作為key,但進(jìn)行t1=null,t2=null的時(shí)候,本來按照常理來說,Java回收機(jī)制會(huì)對那些沒有引用的堆內(nèi)存對象進(jìn)行回收,但不幸的是,HashMap依舊會(huì)強(qiáng)引用著t1跟t2的堆內(nèi)存對象,導(dǎo)致GC無法對其進(jìn)行回收
下面講更為深入的講解HashMap:?
1.散列表的原理與實(shí)現(xiàn) - 簡書?
2.哈希表(散列表)原理詳解 - 那年聰聰 - CSDN博客?
3.HashMap的存取之美 - gugege - 博客園?
4.理解LinkedHashMap - children - 博客園
總結(jié)
以上是生活随笔為你收集整理的HashMap与垃圾回收的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解java垃圾回收机制
- 下一篇: WeakHashMap垃圾回收原理