日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM的内存分区

發布時間:2025/3/8 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM的内存分区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JVM的內存分區

這篇文章嘗試討論清楚JVM的內存分區情況。

1.?????? JVM的內存和系統內存的關系

下圖是對系統內存及JVM內存的大致描繪

?

對大多數操作系統,內存可以分為物理內存RAM及Swap(交換區)兩大部分,Swap Space在物理上是一塊獨立的磁盤區域,當操作系統發現內存不夠使用時,便開始使用交換區。

在系統層面,Linux系統的內存大致可以劃分為:

  • BIN,內核引導內存
  • Kernel Space(內核內存),操作系統進行程序調度,內存分配,硬件資源管理等動作需要的內存
  • User Space(用戶內存),提供給各個進程使用
  • 一個JAVA程序開始運行之后,是存在于系統之上的一個進程。這個進程所占用的內存由JVM管理。

    2.?????? JVM內存的劃分

    JVM的內存可以劃分為以下幾個主要部分:

    ?

  • Program Counter Register,程序計數器,線程私有,是一塊較小的內存空間,可以理解為當前線程執行字節碼的行號指示器。
  • Method Area,方法區,由各線程共享,用于加載類信息,常量,靜態變量等數據。在HotSpot虛擬機的實現中,稱這部分內存為Permanent Generation(永久代),這使得虛擬機可以像管理堆內存一樣對這部分內存進行管理,可以通過參數-XX:MaxPermSize指定永久代的上限。而在其他虛擬機實現中并未使用永久代來實現方法區。當方法區無法滿足內存分配需要時,便會拋出OutOfMemoryError。
  • Java Heap,堆,線程共享,對大部分應用來說,這是JVM種最大的一塊內存區域。JVM規范規定:所有的對象實例和數組都要在堆上分配。
  • 堆是內存回收的主戰場,因此由稱為Garbage Collected Heap(GC堆),在分代收集策略下,堆可以進一步劃分為新生代和老年代,更細致的:

    • Eden區,對象第一次創建時,從Eden區開辟空間
    • Survivor區,當Eden區不足以進行下次內存分配時,JVM觸發一次GC,經過GC但未被回收的對象,被轉移到Survivor區。Survivor分為From,To兩部分,多次內存回收時未被回收的對象在這兩塊區域中來回轉移。
    • Old區,當經過一定次數的GC后仍未被回收的對象,JVM將其轉移到老年代區

      4. JVM Stack,JAVA虛擬機棧,線程私有,其生命周期與對應的線程相同。當每個方法執行時,均會創建一個棧幀(Stack Frame)用于存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。每個方法的執行和完成,便對應著Stack Frame在虛擬機棧中的出棧和入棧的過程。通常意義上粗糙地將JVM內存劃分為堆和棧,其中的棧便指的是JVM Stack.

      5. Native Method Stack,本地方法棧,與JVM Stack類似,本地方法棧對應的是Native方法的執行管理。

    此外,程序運行所需要的內存開辟在JVM的內存空間中,也可以直接申請系統內存(Directive Memory),但是直接申請的系統內存不受JVM的垃圾回收管理,其釋放由系統層面控制,因此對于不關注內存回收的JAVA程序員來說,容易導致內存溢出等問題的發生。

    轉載于:https://www.cnblogs.com/luojiahu/p/8231502.html

    總結

    以上是生活随笔為你收集整理的JVM的内存分区的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。