String類的substring方法bug

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

wKioL1Qn0-HhwQcAAAL5qPztuWI993.jpg

wKiom1Qn07jxe5AZAAEwB_pzjz8521.jpg

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

  還好查了一下資料JDK7解決了這個問題,因而趕忙查看了JDK7的源碼:blog

wKioL1Qn1HSTr4pSAAKxL6VlXRo252.jpg

wKiom1Qn1EzCgnDVAAJoairhoMQ543.jpg

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

相關文章
相關標籤/搜索