String類的substring方法bug

    今天再看JDK源碼的時候看到了String類的不同版本的實現方式的不同,主要是substring這個方法,JDK6裏面的實現方式是:

wKioL1Qn0-HhwQcAAAL5qPztuWI993.jpg

wKiom1Qn07jxe5AZAAEwB_pzjz8521.jpg

很明顯可以看到,調用String對象的substring方法後指向的對象地址並沒有發生改變,只是改變的是偏移量,這樣的話在GC階段就有可能造成內存泄露了。

  還好查了一下資料JDK7解決了這個問題,於是趕緊查看了JDK7的源碼:

wKioL1Qn1HSTr4pSAAKxL6VlXRo252.jpg

wKiom1Qn1EzCgnDVAAJoairhoMQ543.jpg

這個裏面是通過內存複製的方式重新指向了一個新的地址,解決了內存泄露的隱患

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章