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