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

一文看懂JVM內存分布與作用

云計算 虛擬化
如果線程正在執行一個Java方法,那么它記錄的是正在執行虛擬機字節碼指令的地址,如果是一個本地方法那么它的值為空。

[[403896]]

本文轉載自微信公眾號「一個程序員的成長」,作者bingfeng 。轉載本文請聯系一個程序員的成長公眾號。

那么我們在開始介紹Java內存區域之前,我們先放一張內存區域的圖,方便我們后面介紹的時候可以對照著看。

「須知」,本文是根據JDK8來介紹的。

Java內存區域圖

程序計數器

首先它是線程私有的,它也稱為代碼的行號指示器,字節碼解釋器就是通過改變程序計數器的位置來確定下一行要執行的代碼,它不存在OOM。

如果線程正在執行一個Java方法,那么它記錄的是正在執行虛擬機字節碼指令的地址,如果是一個本地方法那么它的值為空。

Java虛擬機棧

它也是線程私有的,它的聲明周期和線程一致。每個線程創建時都會創建一個虛擬機棧,內部保存了一個個的棧幀,每個棧幀就對應著一次方法的調用。既然知道了虛擬機棧里面存放的是一個個的棧幀,那么也不難猜出虛擬機棧里面都存儲了什么東西。

Java虛擬機棧是存在OOM的,當線程所請求的棧的深度大于虛擬機棧的深度或者虛擬機棧可以動態擴容,當棧擴展時無法申請到足夠的內存時,就會拋出OOM。

  • 「虛擬機棧內部結構」:

虛擬機棧內部結構

  • 「局部變量表」:

主要存儲方法的參數,所有的基本類型數據和對象地址,以及返回地址類型(return address)。它以變量槽為最小的存儲單位,Java虛擬機并沒有規定一個變量槽占用多少內存空間,但是規定了一個變量槽可以存放一個32位以內的數據類型。如果存儲的數據類型超過32位,比如long、double,那么就使用兩個變量槽進行存儲。

  • 「操作數棧」:

操作數棧是一個先進后出的操作數棧,當一個方法剛開始執行的時候,一個新的棧幀也會隨之被創建出來,這個方法的操作數棧是空的,它主要用于保存計算過程的中間結果,同時作為計算過程中變量臨時的存儲空間。如果被調用的方法有返回值,那么返回值將會被壓入當前棧幀的操作數棧中。操作數棧并非采用索引的方式進行數據訪問,而是通過入棧(push)和出棧(pop)操作來完成數據的訪問。

  • 「動態鏈接」:

大白話就是,棧幀中保存了一個方法的引用,當執行方法的時候,可以拿著這個引用到運行時常量池中找到這個方法。

動態鏈接的作用就是將這些方法的符號引用轉換為調用方法的直接引用。

  • 「方法返回地址」:

就是在方法執行結束之后,要返回下一條要執行代碼位置的值,也就是程序計數器的值。

那么除了方法正常執行結束退出外,還有另外一種情況就是異常導致的方法退出,那么這種情況下是不會返回任何值的。對于拋出的異常,棧幀中不會做任何記錄,但是會記錄在一個異常表中。

本地方法棧

Java虛擬機棧為虛擬機執行Java方法服務,本地方法棧則為虛擬機使用到的本地方法服務。像JVM就有好多C語言寫的方法,這個就需要本地方法棧來執行。

Java堆

Java堆是虛擬機中最大的一塊內存空間,它被所有的線程共享,在虛擬機啟動時創建。它唯一的目的就是存放對象實例。

如果面試被問到,所有的對象實例都是在堆中分配內存嗎?這個時候你一定要回答,不是。

隨著即時編譯技術的發展進步,尤其是逃逸分析技術的日漸強大,棧上分配、變量替換等優化手段,讓實例在”只在堆“中分配不再成為絕對。

Java堆是垃圾收集的主要區域,Java堆中也經常出現新生代、老年代、永久代等等,這里需要注意,這些并不是Java堆物理上的內存布局,它是作為垃圾收集器而劃分一種內存布局。

方法區

方法區也是線程共享的區域,它主要用于存儲被虛擬機加載的類型信息、常量、靜態變量、即時編譯器編譯后的代碼緩存等數據。

方法區它是可以被垃圾收集器進行回收的,主要針對類型的卸載和常量池的回收。

方法區也可以產生OOM,當方法區無法滿足新的內存分配需求時,將拋出OutOfMemoryError異常。

運行時常量池

運行時常量池是方法區的一部分。Class文件中除了有類的版本、字段、方法、接口等信息外,還有一項信息是常量池表,它用來存儲編譯期生成的各種字面量和符號引用。

如果動態鏈接那塊沒看懂,那么看了運行常量池再翻回去看看是不是好理解了。

 

責任編輯:武曉燕 來源: 一個程序員的成長
相關推薦

2025-06-09 04:00:00

2020-03-31 14:40:24

HashMap源碼Java

2021-08-30 11:13:28

內存交換機制

2016-08-18 00:21:12

網絡爬蟲抓取網絡

2024-08-12 12:30:27

2021-09-08 17:42:45

JVM內存模型

2025-01-20 09:15:00

iOS 18.3蘋果iOS 18

2021-08-02 06:56:19

TypeScript編程語言編譯器

2021-08-01 08:05:39

Linux信號原理

2019-05-22 09:50:42

Python沙箱逃逸網絡攻擊

2019-07-01 09:22:15

Linux操作系統硬件

2020-05-12 11:38:08

存儲架構分布式

2025-03-25 09:06:11

2021-05-11 10:40:29

JUCAQSJava

2021-05-12 15:16:17

JUCAQSJava

2021-02-21 11:25:17

云計算IaaSPaaS

2022-04-26 13:41:16

區塊鏈比特幣數據庫

2024-10-10 17:55:57

LinuxACL訪問控制列表

2023-04-10 11:35:31

評估模型業務流程

2023-12-18 10:45:31

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美黄色网络 | 精品一区精品二区 | 精品一区久久 | 91久久国产综合久久91精品网站 | 日韩欧美视频网站 | 热99在线 | 国产一区二区三区在线 | 日韩欧美黄色 | 亚洲人成网亚洲欧洲无码 | 一区二区三区免费 | 中文天堂在线观看 | 免费观看一级特黄欧美大片 | 免费观看av | 午夜影院视频在线观看 | 天天操操| 九九视频在线观看 | 欧美天堂在线观看 | 日韩www视频 | 日本在线精品视频 | 自拍偷拍3p| 性高湖久久久久久久久aaaaa | 九九热免费在线观看 | 亚洲国产成人在线视频 | 日一区二区 | 亚洲精久久 | 亚洲一区二区三区免费视频 | 日本精品裸体写真集在线观看 | 日韩在线欧美 | 亚洲视频免费在线观看 | 亚洲视频三 | 精品日韩一区 | 久色视频在线观看 | 成人免费高清 | 久久久久久久久久爱 | 国产免费一区 | 国产精品看片 | 久久精品二区亚洲w码 | 久久99精品久久久久久国产越南 | 91在线一区| 香蕉视频黄色 | 国产精品中文字幕在线观看 |