圖 1 JVM 體系結(jié)構(gòu)
JVM_ARGS="-Xmx2g -Xms2g -Xmn1024m -XX:PermSize=256m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedOops -XX:-ReduceInitialCardMarks"
?
方法區(qū)
:存放
JVM
加載的類(lèi)型信息。包括
:
?
類(lèi)型基本信息,常量池,字段信息,方法信息,類(lèi)變量,指向
ClassLoader
的引用,
Class
類(lèi)的引用,方法表等。
(對(duì)應(yīng) JVM 內(nèi)存配置中的 -PermSize 等)
?
?
java 堆 :程序中創(chuàng)建的類(lèi)的實(shí)例和數(shù)組,包括 class 對(duì)象和 exception 對(duì)象,存放在堆里面。堆中除了存儲(chǔ)對(duì)象的實(shí)例數(shù)據(jù)外,還要存儲(chǔ)該對(duì)象指向方法區(qū)中類(lèi)型信息的指針。
?
( JVM 中所有的線(xiàn)程共享堆空間,對(duì)應(yīng) JVM 內(nèi)存配置中的 -Xms 和 -Xmx 等)
java 棧 :當(dāng) JVM 創(chuàng)建一個(gè)新線(xiàn)程時(shí),都會(huì)產(chǎn)生線(xiàn)程計(jì)數(shù)器( PC Register )和棧。每一次方法調(diào)用都會(huì)產(chǎn)生棧幀,棧幀中包含局部變量區(qū)和操作數(shù)棧。
?
?
( JVM 中棧被線(xiàn)程獨(dú)享,對(duì)應(yīng) JVM 內(nèi)存配置中的 -Xss )
?
線(xiàn)程計(jì)數(shù)器 :每個(gè)線(xiàn)程擁有自己的程序計(jì)數(shù)器,它指向下一條指令。當(dāng)線(xiàn)程調(diào)用本地方法的時(shí)候, 它為 undefined 。
?
?
本地方法棧 :當(dāng) JVM 線(xiàn)程調(diào)用了本地方法, 則會(huì)跳入本地方法棧。本地方法返回后可能再次跳回 java 方法棧。
?
?
?
( JVM 支持本地方法調(diào)用,故 JVM 占用的 OS 內(nèi)存可能會(huì)超出 JVM 堆內(nèi)存大小設(shè)置,甚至?xí)a(chǎn)生本地內(nèi)存泄漏)
?
?
?
附錄1:? heap
和
stack的區(qū)別:
??? java
的內(nèi)存分為兩類(lèi),一類(lèi)是棧內(nèi)存,一類(lèi)是堆內(nèi)存。棧內(nèi)存是指程序進(jìn)入一個(gè)方法時(shí),會(huì)為這個(gè)方法單獨(dú)分配一塊私屬存儲(chǔ)空間,用于存儲(chǔ)這個(gè)方法內(nèi)部的局部變量,當(dāng)這個(gè)方法結(jié)束時(shí),分配給這個(gè)方法的棧會(huì)釋放,這個(gè)棧中的變量也將隨之釋放。
??? 堆是與棧作用不同的內(nèi)存,一般用于存放不放在當(dāng)前方法棧中的那些數(shù)據(jù),例如,使用
new
創(chuàng)建的對(duì)象都放在堆里,所以,它不會(huì)隨方法的結(jié)束而消失。方法中的局部變量使用
final
修飾后,放在堆中,而不是棧中。
?
附錄2: 本地方法
??? 如果應(yīng)用程序需要使用系統(tǒng)特性或設(shè)備,比如,調(diào)用操作系統(tǒng)的API函數(shù),可能使用Java編寫(xiě)這樣的代碼是非常麻煩甚至是不可能的。在這種情況下,需要調(diào)用其他語(yǔ)言(比如C/C++)編寫(xiě)的代碼,這些代碼被稱(chēng)為本地(native)方法或本機(jī)方法。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

