99插插插,亚洲伦理中文在线,站长推荐一二三区欧美,青青草在线导航

×

深入理解Java虛擬機(jī) - Java內(nèi)存區(qū)域

  • 作者:
  • 來源:
  • 瀏覽:100
  • 2018-05-04 15:15:29

Java虛擬機(jī)在執(zhí)行Java程序的過程中會把它所管理的內(nèi)存劃分為若干個不同的數(shù)據(jù)區(qū)域。 這些區(qū)域都有各自的用途,以及創(chuàng)建和銷毀的時間,有的區(qū)域隨著虛擬機(jī)進(jìn)程的啟動而存在,有些區(qū)域則依賴用戶線程的啟動和結(jié)束而建立和銷毀。

   t01996f7a68eec06529.jpg

<div>Java虛擬機(jī)在執(zhí)行Java程序的過程中會把它所管理的內(nèi)存劃分為若干個不同的數(shù)據(jù)區(qū)域。 這些區(qū)域都有各自的用途,以及創(chuàng)建和銷毀的時間,有的區(qū)域隨著虛擬機(jī)進(jìn)程的啟動而存在,有些區(qū)域則依賴用戶線程的啟動和結(jié)束而建立和銷毀。 
  程序計數(shù)器
  程序計數(shù)器:是一塊較小的內(nèi)存空間,它可以看作是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器。每個線程都有自己的獨(dú)立的程序計數(shù)器。如果線程正在執(zhí)行的是Java方法,那么這個計數(shù)器的值就是正在執(zhí)行的虛擬機(jī)字節(jié)碼指令的地址;如果正在執(zhí)行的是Native方法,這個計數(shù)器值為空(undefined)。此內(nèi)存區(qū)域是唯一一個在Java虛擬機(jī)規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域。
  Java虛擬機(jī)棧
  線程私有的,它的生命周期與線程相同。虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型:每個方法執(zhí)行的同時都會創(chuàng)建一個棧幀用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。局部變量表存放了編譯期可知的各種基本數(shù)據(jù)類型(boolean、byte、char、short、int、float、long、double)、對象引用和returnAddress類型(指向了一條字節(jié)碼指令的地址)。其中64位長度的long和double類型的數(shù)據(jù)會占用2個局部變量空間(slot),其余的數(shù)據(jù)類型占1個。局部變量表所需的內(nèi)存空間在編譯期間分配完成,當(dāng)進(jìn)入一個方法時,這個方法需要在幀中分配多大的局部變量空間是完全確定的,在方法運(yùn)行期間不會改變局部變量表的大小。如果線程請求棧的深度大于虛擬機(jī)所允許的深度,將拋出StackOverflowError異常;無法申請到內(nèi)存拋出OutOfMemoryError異常。
  本地方法棧
  本地方法棧與虛擬機(jī)棧所發(fā)揮的作用是非常相似的,它們之間的區(qū)別不過是虛擬機(jī)棧為虛擬機(jī)執(zhí)行java方法,而本地棧則為虛擬機(jī)使用到的Native方法服務(wù)。
  Java堆
  Java堆是線程共享的,在虛擬機(jī)啟動時創(chuàng)建。此區(qū)域的唯一目的就是存放對象實(shí)例,幾乎所有的對象實(shí)例都在這里分配內(nèi)存。Java堆是垃圾收集器管理的主要區(qū)域,因此很多時候也被稱作“GC堆”。由于現(xiàn)在收集器基本都采用分代收集算法,所以Java堆中還可以細(xì)分為:新生代和老年代;再細(xì)致一點(diǎn)的有Eden空間、From Survivor空間、To Survivor空間等。在實(shí)現(xiàn)時,既可以實(shí)現(xiàn)成固定大小的,也可以是可擴(kuò)展的,不過當(dāng)前主流的虛擬機(jī)都是按照可擴(kuò)展來實(shí)現(xiàn)的(通過-Xmx和-Xms控制)。
  方法區(qū)(永久代)
  線程共享,用于存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。這區(qū)域的內(nèi)存回收目標(biāo)主要是針對常量池的回收和對類型的卸載!
  運(yùn)行時常量池
  他是方法區(qū)的一部分,Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項信息就是常量池,用于存放編譯期生成的各種字面量和符號引用,這部分內(nèi)容將在類加載后進(jìn)入方法區(qū)的運(yùn)行時常量池中存放。
  直接內(nèi)存
直接內(nèi)存不是虛擬機(jī)運(yùn)行時數(shù)據(jù)區(qū)的一部分。但是這部分內(nèi)存也被頻繁地使用,而且也可能導(dǎo)致OutOfMemoryError異常出現(xiàn)。在JDK1.4中新加入了NIO類,引入了一種基于通道與緩存區(qū)(buffer)的I/O方式,它可以使用Native函數(shù)庫直接分配堆外內(nèi)存,然后通過一個存儲在Java堆中的DirectByteBuffer對象作為這塊內(nèi)存的引用進(jìn)行操作。這樣能在一些場景中顯著提高性能,因?yàn)楸苊饬嗽贘ava堆和Native堆中來回復(fù)制數(shù)據(jù)。
以上就是Java內(nèi)存區(qū)域的全部介紹。
 

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢獲取折扣

Loading
午夜无码鲁丝片午夜精品一区二区| 日韩 亚洲 欧美综合| 蜜臀日韩久久| 亚洲 日本 久久| 欧美黄片不卡视频| 粉嫩一区二区三区色综合| 亚洲精品国产熟女高清| 久久后入三区| 亚洲肛交一区二区| 一区二区精小说| 欧美XXX黑人XYX| 夜操www日操www| 鸡巴插入小穴穴电影| 国产精品二区6| 欧美日韩国产一区二区三区地区| 色日人妻| 综合国产中文欧美日韩亚洲中字| 日韩无码乱伦网站| 麻豆传媒精品视频在线| AV在线特黄| 青青乱码| 好吊妞这里有精| 无码流出小穴| 欧美亚洲国产区一区二区| 色狠狠狠狠色综合久久久| 久久久91人妻无码A| 亚洲色区狠狠爱| 日韩肛交 第一页| 色婷婷播放四| 国产日韩一区二区av在线观看| 嫩草人妻搞出水| 嗯嗯啊啊好大好痛网站免费观看视频| 国产精品三级合集| 中国少妇视频一区| 中文久久字幕日韩有码欧美精品| 欧美日本一区porn| 一级黄色片99999| 黑丝美女被操好爽| 亚洲一个色| 大香蕉小香蕉狼性在线视频| 日本大黑鸡巴插逼|