您好,登錄后才能下訂單哦!
從上面這個圖我們總體上對JVM的結構特別是內存結構有了比較清晰的認識,雖然在JDK1.8+的版本中,JVM內存管理結構有了一定的優化調整。主要是方法區(持久代)取消變成了直接使用元數據區(直接內存)的方式,但是整體上JVM的結構并沒有大改,特別是我們最為關心的堆內存管理方式并沒有在JDK1.8+的版本中有什么變化,所以圖中的結構整體上是沒有什么不準確的,之所以將方法區以及持久代標注出來,主要還是為了起到對比認識的作用,大家知道就可以了。
關于持久代元數據區的使用問題,目前可以理解就是使用的物理內存,理論上是不受JVM自動內存回收機制管理的,如果不設置參數大小默認最大使用限制就是操作系統可用物理內存的大小,設置了-XX:MetaspaceSize參數的話,JVM就會在使用物理內存空間時自己進行限制。
至于直接內存與物理內存到底是不是一回事,我認為對于我們理解上沒有區別,只是概念的區別,另外就是對這塊內存使用細節上的區別,如果不受JVM的自動回收管理,那么怎么管理呢?說到底還是JVM本身在直接使用物理內存或者說是直接內存(用時直接“malloc”物理內存區域,而不再是JVM進程啟動時初始化的內存區域),還有一種概念叫native memory,說實話我暫時還不理解他們到底有啥區別,如果大家對這些概念有更好的認識,也可以給我留言哦!之所以對這幾個問題做一些筆墨的說明,主要是在之前的文章中大家對此提出了疑問,所以正好在這節的內容中進行下闡述。
回到今天的主題,我們知道JAVA最大的優點就是可以實現自動內存管理,這極大的便利了JAVA程序員,降低了使用成本。但這也使得平時我們在使用JAVA編程時不太關注JVM到底是怎樣進行內存回收的,只有在需要實際對JVM進行系統性能調優,這里的場景可能是在系統面臨極致性能優化要求時,我們才發現需要對JAVA的整體內存結構以及內存回收機制要有一定的認識和了解才行。
從上面的圖中,我們也大致對整個垃圾回收系統進行了標注,這里主要涉及回收策略、回收算法、垃圾回收器這幾個部分。形象一點表述,就是JVM需要知道那些內存可以被回收,要有一套識別機制,在知道那些內存可以回收以后具體采用什么樣的回收方式,這就需要設計一些回收算法,而具體的垃圾回收器就是根據不同內存區域的使用特點,采用相應地回收策略和算法的具體實現了。
在
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。