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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JVM运行时区域详解

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM运行时区域详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?JVM運行時區域詳解



我們知道的JVM內存區域有:堆和棧,這是一種泛的分法,也是按運行時區域的一種分法,堆是所有線程共享的一塊區域,而棧是線程隔離的,每個線程互不共享。

線程不共享區域

每個線程的數據區域包括程序計數器、虛擬機棧和本地方法棧,它們都是在新線程創建時才創建的。

程序計數器(Program Counter Rerister)

程序計數器區域一塊內存較小的區域,它用于存儲線程的每個執行指令,每個線程都有自己的程序計數器,此區域不會有內存溢出的情況。

虛擬機棧(VM Stack)

虛擬機棧描述的是Java方法執行的內存模型,每個方法被執行的時候都會同時創建一個棧幀(Stack Frame)用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。每一個方法被調用直至執行完成的過程就對應著一個棧幀在虛擬機棧中從入棧到出棧的過程。

本地方法棧(Native Method Stack)

本地方法棧用于支持本地方法(native標識的方法,即非Java語言實現的方法)。

虛擬機棧和本地方法棧,當線程請求分配的棧容量超過JVM允許的最大容量時拋出StackOverflowError異常。

線程不共享區域如下圖綠色背景所示。

線程共享區域

線程共享區域包含:堆和方法區。

堆(Heap)

堆是最常處理的區域,它存儲在JVM啟動時創建的數組和對象,JVM垃圾收集也主要是在堆上面工作。

如果實際所需的堆超過了自動內存管理系統能提供的最大容量時拋出OutOfMemoryError異常。

方法區(Method Area)

方法區是可供各條線程共享的運行時內存區域。存儲了每一個類的結構信息,例如運行時常量池(Runtime Constant Pool)、字段和方法數據、構造函數和普通方法的字節碼內容、還包括一些在類、實例、接口初始化時用到的特殊方法。

當創建類和接口時,如果構造運行時常量池所需的內存空間超過了方法區所能提供的最大內存空間后就會拋出OutOfMemoryError

運行時常量池(Runtime Constant Pool)

運行時常量池是方法區的一部分,每一個運行時常量池都分配在JVM的方法區中,在類和接口被加載到JVM后,對應的運行時常量池就被創建。運行時常量池是每一個類或接口的常量池(Constant_Pool)的運行時表現形式,它包括了若干種常量:編譯器可知的數值字面量到必須運行期解析后才能獲得的方法或字段的引用。

如果方法區的內存空間不能滿足內存分配請求,那Java虛擬機將拋出一個OutOfMemoryError異常。

棧包含Frames,當調用方法時,Frame被推送到堆棧。一個Frame包含局部變量數組、操作數棧、常量池引用。


總結

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

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