成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM內存區域劃分精講,你學會了嗎?

開發 前端
堆和方法區一樣也是各個線程共享的一塊內存區域。堆也就是我們常說的 Java 堆,也是垃圾回收器主要管理的區域(方法區可以選擇不實現垃圾收集),“幾乎”所有的對象實例都在這里分配內存。

引言

大家好,我們又見面了。有小伙伴說 JVM 內存區域在學習與面試的時候常常理不清,為了解決這位小伙伴的困擾,我將通過兩篇文章為大家理清 JVM 內存區域劃分,這篇是第一篇將為大家介紹 JVM 內存區域的邏輯概念,下一篇將和大家嘮一嘮 HotSpot 虛擬機實現的一些小細節。安全帶系好,發車咯!

運行時數據區

首先我們來明確一下運行時數據區的概念,Java 虛擬機在執行 Java 程序的過程中會將它所管理的內存劃分為若干不同的數據區,這些數據區就是運行時數據區,這些區域有各自的用途和生命周期。

根據《Java 虛擬機規范》的規定 JVM 所管理的內存分為:虛擬機棧、本地方法棧、程序計數器、方法區和堆這五種運行時數據區。

圖片圖片

下面我們來分別介紹他們的邏輯概念。

需要注意,邏輯概念只是《Java虛擬機規范》中對運行時數據區進行的邏輯規范,不同的虛擬機的具體實現會略有差異。

虛擬機棧

虛擬機棧也是我們常說的 Java 棧,是線程私有的,在每一個線程啟動的時候都會創建一個虛擬機棧。

虛擬機棧的生命周期和線程一致,虛擬機棧的內部存儲著一個個棧幀,對應著 Java 方法的一次次調用,方法被調用則壓棧,方法調用結束則出棧。

每一個棧幀內部又存儲了局部變量表、方法返回地址、操作數棧、動態鏈接等信息。

圖片圖片

在虛擬機棧規范了兩種異常情況。一是當線程請求的棧深度大于虛擬機所允許的深度則會拋出 SOF(StackOverflowError)異常;二是當虛擬機棧容量動態擴展時無法申請到足夠的內存則會拋出 OOM(OutOfMemoryError)異常。

本地方法棧

本地方法棧的作用與虛擬機棧類似,只不過虛擬機棧服務于 Java 方法調用,本地方法棧服務于本地方法(native)調用。

本地方法棧也是線程私有的,且與虛擬機棧一致,在棧深度異常和擴展失敗時分別會拋出 SOF 異常和 OOM 異常。

程序計數器

程序計數器用作當前線程所執行字節碼的行號指示器,同樣是線程私有的,它會存儲當前正在執行的字節碼指令地址,并在當前字節碼指令執行結束后切換為下一步需執行的字節碼指令地址,線程就在程序計數器的推動下一步步執行。

如果當前執行的是本地方法,則程序計數器會存儲 Undefined。

方法區

方法區是各個線程共享的一塊內存區域,主要用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器(JIT)編譯后的代碼緩存等數據。

圖片圖片

JVM 關閉后方法區將會被釋放。

方法區的常量主要被劃分為運行時常量池和字符串常量池兩大區域。

字節碼文件中有一個區域叫做常量池表(Constant Pool Table),常量池表主要用于存儲編譯器生成的各種字面量與符號引用。

常量池表可以看作是一張表,虛擬機指令根據這張常量表找到要執行的類名、方法名、參數類型、字面量等類型

而常量池表存儲的內容將在類加載后存放到方法區的運行時常量池中。

至于字符串常量池就是用于儲存字符串。

需要注意 Java 中的基本類型的包裝類的大部分都實現了常量池技術,不過這里的常量池嚴格來說應該叫做對象池,所以它們歸屬于堆,并不屬于方法區。

無論在不同版本的虛擬機實現中字符串常量池和靜態變量的存儲位置發生了怎樣的變化,在邏輯上這兩個區域是永遠歸屬于方法區的。

方法區在內存擴展失敗的時候同樣會拋出 OOM 異常。

堆和方法區一樣也是各個線程共享的一塊內存區域。堆也就是我們常說的 Java 堆,也是垃圾回收器主要管理的區域(方法區可以選擇不實現垃圾收集),“幾乎”所有的對象實例都在這里分配內存。

在規范中,堆可以處于在物理上不連續的內存空間,只要邏輯上連續即可,不過對于數組這種大對象,為了實現簡單和提高性能,大多數虛擬機實現都會考慮使用連續的內存空間。

在當前主流的虛擬機實現中,堆都可以通過-Xms 和-Xmx 設置容量,如果堆中的內存不足以完成對象的實例分配,且堆無法再擴展時就會拋出 OOM 異常,這也是 OOM 異常最頻發的一塊區域。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2023-05-29 07:43:32

JVM內存調優

2023-01-31 08:02:18

2023-08-28 07:02:10

2023-07-31 07:33:05

JVM調優Full GC

2024-02-02 09:00:14

內存泄漏對象

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2022-06-04 07:46:41

HeapJVM

2024-03-06 08:28:16

設計模式Java

2022-06-16 07:50:35

數據結構鏈表

2022-12-06 07:53:33

MySQL索引B+樹

2023-10-06 14:49:21

SentinelHystrixtimeout

2022-07-13 08:16:49

RocketMQRPC日志

2023-05-05 06:54:07

MySQL數據查詢

2023-03-26 22:31:29

2023-08-26 21:34:28

Spring源碼自定義
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日碰狠狠躁久久躁96avv | 美女在线一区二区 | 亚洲国产区 | 日韩久久在线 | 国产乱肥老妇国产一区二 | 在线视频国产一区 | 午夜视频在线观看视频 | 欧美 日韩 国产 成人 | 成人精品一区二区三区 | 日韩综合在线播放 | 美女一区二区在线观看 | 精品国产区 | 日本三级全黄三级三级三级口周 | 依人成人 | 欧美精品在线一区二区三区 | 精品一区二区三区四区五区 | 欧美成人一级视频 | 精品亚洲永久免费精品 | 亚洲一区二区三区视频 | 欧美一区二区在线观看视频 | 日本在线视频一区二区 | 亚洲视频在线看 | 国产国拍亚洲精品av | 久久国产欧美一区二区三区精品 | 亚洲精品日韩在线 | 国产成人免费视频网站高清观看视频 | 日本高清视频在线播放 | 中文字幕亚洲视频 | 天天操人人干 | 欧美aⅴ在线观看 | 亚洲成人一级片 | 午夜小视频在线播放 | 成人av网站在线观看 | 久草电影网 | 国产久 | 亚洲精品1 | 第一福利社区1024 | 久久精品国产久精国产 | 午夜免费福利片 | 免费成人毛片 | 超碰在线人人干 |