<samp id="tdkee"></samp>

    <mark id="tdkee"><acronym id="tdkee"></acronym></mark>

  1. 免费看又黄又无码的网站_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片_日本最新免费二区三区

    ×

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

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

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

       t01996f7a68eec06529.jpg

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

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

    免費咨詢獲取折扣

    Loading
    国产精品视频白浆免费视频_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片

    <samp id="tdkee"></samp>

      <mark id="tdkee"><acronym id="tdkee"></acronym></mark>