jvm的永久代

沙漠裡的小聾蝦發表於2017-10-22

記得曾經在課本上看到了永久代的概念,但是沒有看過在哪裡會有用到,最近準備面試,想深入的瞭解永久代到底是什麼

jvm的語言規範裡面定義了方法區(為了區分叫做“非堆”)的概念,方法區主要用於儲存類的資訊、常量池、方法資料、方法程式碼等資訊。但是不同的虛擬機器有不同的實現,其中hotspot實現通過永久代來實現了方法區。

在java程式碼中如果在一個while迴圈裡面不停的創造物件的話就會發生永久代溢位。

在java8中完全移除了永久代概念,使用元空間來代替,元空間不在虛擬機器中,而是使用的本地記憶體。

為什麼需要將永久代替換成元空間?(工程上方案的改進都是在修補前面的漏洞,都不是剛開始就有一個頂級的設計)

永久代gc代價大、oracle將來會合並hotspot和jrockit

參考:http://www.cnblogs.com/paddix/p/5309550.html

 

相關文章