jvm內存模型和java內存模型_JVM運行時內存模型綜述

JVM內存模型

JVM分為五個區域:虛擬機棧、本地方法棧、方法區、堆、程序計數器。

78f9a5d48ab92d2bfe8e2181f2dee7d4.png

JVM不同區域的占用內存大小不同,一般情況下堆最大,程序計數器較小。

055c4b0710ad06b241fcb3b36993d65c.png

JVM五個區中虛擬機棧、本地方法棧、程序計數器為線程私有,方法區和堆為線程共享區。

2bffdc8d036cc02f066a7835dc7d0407.png

堆的作用是存放對象實例和數組。因為堆占用內存空間最大,堆也是Java垃圾回收的主要區域(重點對象),因此也稱作“GC堆”(Garbage Collected Heap)。堆的GC操作采用分代收集算法。

ea1ee38dc73310178b13923f944b4b87.png

堆分為新生代和老年代;新生代又分為:Eden空間、From Survivor(S0)空間、To Survivor(S1)空間。關于Survivor區,Survivor的兩個區是對稱的,沒先后關系,所以同一個區中可能同時存在從Eden復制過來的對象,和從前一個Survivor復制過來的對象,而復制到老年代的只有從第一個Survivor區過來的對象。而且,Survivor區總有一個是空的。

調節的參數主要有:

-Xms設置堆的最小空間大小。

-Xmx設置堆的最大空間大小。

-XX:NewSize設置新生代最小空間大小。

-XX:MaxNewSize設置新生代最大空間。

圖中Virtual區域就是設置參數中最大空間和最小空間之間的差值。

關于老年代,沒有直接設置老年代的參數,但是可以設置堆空間大小和新生代空間大小兩個參數來間接控制。

老年代空間大小=堆空間大小-年輕代大空間大小

如果在堆中沒有內存完成實例分配,并且堆也無法再擴展時,將會拋出OutOfMemoryError異常。

方法區

方法區(Method Area)用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據,方法區與Java 堆一樣,是各個線程共享的內存區域。雖然Java 虛擬機規范把方法區描述為堆的一個邏輯部分,但是它卻有一個別名叫做Non-Heap(非堆),目的應該是與Java 堆區分開來。

f5ebc50703b0a9031d216251ab913004.png

調節的參數:

-XX:PermSize設置永久代最小空間大小。

-XX:MaxPermSize設置永久代最大空間大小。

-Xss設置每個線程的堆棧大小。

關于永久代(Permanent Generation)和方法區,本質上兩者并不等價,僅僅是因為HotSpot虛擬機的設計團隊選擇把GC 分代收集擴展至方法區,或者說使用永久代(PermGen來實現方法區而已。其他JVM虛擬機并沒有永久代,jdk8中也沒有了永久代的概念。

相對而言,垃圾收集行為在這個區域是比較少出現的,但并非數據進入了方法區就如永久代的名字一樣“永久”存在了。這個區域的內存回收目標主要是針對常量池的回收和對類型的卸載。根據Java虛擬機規范的規定,當方法區無法滿足內存分配需求時,將拋出OutOfMemoryError異常。

jdk8中,將永久代方法區替換為元數據空間(MetaSpace),MetaSpace占用的內存空間不在JVM內部,而在本地內存空間中。

程序計數器

程序計數器(Program Counter Register)占用內存較小,是線程私有的,它也是唯一沒有OutOfMemoryError異常的區域。

程序計數器的作用可以看做是當前線程所執行的字節碼的行號指示器,字節碼解釋器工作時就是通過改變計數器的值來選取下一條字節碼指令。其中,分支、循環、跳轉、異常處理、線程恢復等基礎功能都需要依賴計數器來完成。

a8b4c5a59450c8458cd52c3963f86444.png

Java虛擬機的多線程是通過線程輪流切換并分配處理器執行時間的方式來實現的,在任何一個確定的時刻,一個處理器(對于多核處理器來說是一個內核)只會執行一條線程中的指令。

因此,為了線程切換后能恢復到正確的執行位置,每條線程都需要有一個獨立的程序計數器,各條線程之間的計數器互不影響,獨立存儲,我們稱這類內存區域為“線程私有”的內存。

如果線程正在執行的是一個Java方法,這個計數器記錄的是正在執行的虛擬機字節碼指令的地址;如果正在執行的是Natvie方法,這個計數器值則為空(Undefined)。

虛擬機棧

虛擬機棧(JVM Stacks)線程私有,生命周期與線程相同。這里存儲著方法的局部變量表。

棧幀(Stack Frame)是用于支持虛擬機進行方法調用和方法執行的數據結構。棧幀存儲了方法的局部變量表、操作數棧、動態連接和方法返回地址等信息。每一個方法從調用至執行完成的過程,都對應著一個棧幀在虛擬機棧里從入棧到出棧的過程。

287e56b135675861eed01cb4eb757a8f.png

局部變量表(Local Variable Table)是一組變量值存儲空間,用于存放方法參數和方法內定義的局部變量。包括8種基本數據類型、對象引用(reference類型)和returnAddress類型(指向一條字節碼指令的地址)。

其中64位長度的long和double類型的數據會占用2個局部變量空間(Slot),其余的數據類型只占用1個。

如果線程請求的棧深度大于虛擬機所允許的深度,將拋出StackOverflowError異常;如果虛擬機棧動態擴展時無法申請到足夠的內存時會拋出OutOfMemoryError異常。

本地方法棧

本地方法棧(Native Method Stacks)與虛擬機棧作用相似,也會拋出StackOverflowError和OutOfMemoryError異常。

區別在于虛擬機棧為虛擬機執行Java方法(字節碼)服務,而本地方法棧是為虛擬機使用到的Native方法服務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532159.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python數獨游戲源代碼100行_python實現自動解數獨小程序

跟朋友最近聊起來數獨游戲,突發奇想使用python編寫一個自動計算數獨解的小程序。 數獨的規則不再過多闡述,在此描述一下程序的主要思路: (當前程序只針對于簡單的數獨,更復雜的還待深入挖掘) 1.計算當前每個…

getline沒有與參數列表匹配的重載函數_C++新增基礎功能解析—函數重載功能的使用...

喜歡的可以收藏轉發加關注“函數重載”指的是可以有多個同名的函數,因此 名稱進行了重載。這兩個術語指的是同一回事,但我們通常使用函數重載。可以通過函數重載來設計? 系列函數——它們完成相同的工作,但使用不同的參數列表。重載函數就像…

公關文秘專業要學計算機,文秘相關專業有哪些

文秘相關專業有哪些引導語:想必大多數人對文秘這個崗位都不陌生,那么與文秘相關專業有哪些呢?接下來是小編為你帶來收集整理的文章,歡迎閱讀!一、中文類專業:中文及相關專業主要包括漢語言文學、漢語言、中…

java seek指針 換行符_Java網絡編程探究|樂字節

大家好,我是樂字節小樂,上次給大家講述了Java中的IO流之輸出流|樂字節,本文將會給大家講述網絡編程。主要內容如下:網絡 網絡分層 IP位置 端口port 網絡編程一、 網絡 1、概念網絡即將不同區域的電腦連接到一起, 組成局…

switch 條件判斷_C語言學習第7篇---C語言三大結構之一判斷結構

if語句分析1.if語句用于根據條件選擇執行語句2.else不能獨立存在且總是與它最近的if想匹配3.else語句后可以接其他if語句if語句中零值比較的注意點---bool型變量應該直接出現在條件中,不要進行比較---變量和0值進行比較時,0值應該出現在比較符合左邊---f…

計算機應用基礎授課提綱,《計算機應用基礎》講授提綱(1).ppt

《計算機應用基礎》講授提綱(1).ppt (49頁)本資源提供全文預覽,點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧,查找使用更方便哦!14.9 積分*第四講 Windows基礎基本操作文件操作控制面板中文操作處理磁盤管理命令提示符*Windows 基本操作桌…

工業機器人演示碼垛和卸垛_眾多企業購買自動碼垛機的原因是什么?

企業為什么要購買自動碼垛機呢?難道僅僅是因為它可以自動,讓工作變得輕松簡單嗎?當然不是,如果自動碼垛機僅僅能夠為企業帶來這么點的好處的話,相信是沒有企業愿意花大價錢來購買這些自動碼垛機的,那么企業究竟是看中了自動碼垛…

python 100days github_GitHub - rghwer/Python-100-Days: Python - 100天從新手到大師

Python - 100天從新手到大師 作者:駱昊 最近有很多想學習Python的小伙伴陸陸續續加入我們的交流群,目前我們的交流群人數已經超過一萬人,光靠我自己已經無法及時處理小伙伴們的入群申請,更無法及時為大家解答問題。目前我的想法是…

python期末項目書怎么寫_自己寫了一部書怎么出版

一部書從無到有,包括編寫和出版。編寫可以自己寫,但出版的問題,得靠規定的出版途徑來解決。那么,自己寫了一部書怎么出版?通常包括兩種方法:找出版社直接合作公費出版和找出版公司合作自費出版。自己寫了一部書怎么出…

去哪里找與計算機相關的外文,找計算機相關的外文翻譯

2019-05-18 回答人品爆發,閑著也是閑著,我給你翻譯好了樓主。你看一下。lets start off this chapter by defining the term web application. weve all seen regularclient-side applications, but what exactly is a web application? loosely, it ca…

分頁請求json數據_Python爬蟲入門教程 28-100 虎嗅網文章數據抓取 pyspider

1. 虎嗅網文章數據----寫在前面 今天繼續使用pyspider爬取數據,很不幸,虎嗅資訊網被我選中了,網址為 https://www.huxiu.com/ 爬的就是它的資訊頻道,本文章僅供學習交流使用,切勿用作其他用途。常規操作,分…

bootstrap 導航菜單 折疊位置_教大家如何編寫一個網頁導航條

導航條簡單地說就是對你整個網站模塊的簡單介紹,你可以直接點擊導航條某一個按鈕或板塊便可進入其相應的界面,如:網頁、新聞、貼吧等 。在企業網站上,導航條上常見的有:產品介紹,公司簡介,最新產…

福建省高等學校非計算機考試大綱,福建省高等學校計算機應用水平等級考試三級(偏軟)考試大綱...

福建省高等學校計算機應用水平等級考試三級(偏軟)考試大綱2007年04月13日 星期五 9:55I、考試目的本考試考查考生以下知識與能力:1.具有較寬的計算機系統基礎知識;2.掌握數據結構的基本類型、典型算法及其應用;3&#…

python擬合函數_Python-最小二乘法曲線擬合

行文思路:最小二乘法原理介紹 利用 leastsq() 函數進行最小二乘法擬合 擬合注意事項 利用curve_fit 進行最小二乘法擬合 總結: 參考文獻 實現代碼 一,最小二乘法擬合 最小二乘法是一種數學優化技術,它通過最小化誤差的平方和尋找數…

計算機網絡提高網絡安全意識,提升網絡安全意識 共創清朗網絡環境

為增強公眾網絡安全意識,提高網絡安全防護技能。近期,徐家營街道圍繞“網絡安全為人民、網絡安全靠人民”活動主題,組織開展了“2020國家網絡安全宣傳周”活動,保障用戶合法權益,維護國家網絡安全。一、廣泛宣傳引導。…

base cap 分布式_干貨分享:基于本地消息表的分布式事務解決方案總結

前段時間學習了分布式事務的幾種方案,下面主要總結下基于本地消息表實現可靠消息最終一致性的分布式事務方案。1,什么是分布式事務?在傳統架構中往往是一個單體架構,一個系統就對應一個war包,然后這個系統也只有一個數…

google protobuf_protobuf 指南

簡介安裝語言定義特殊指令定義服務JSON 支持選項生成代碼基礎類型更新 messageGolang 下使用參考簡介Protocol Buffers 是 google 出品的一種數據交換格式, 縮寫為 protobuf.主要介紹 proto3 版本和 Golang 下的使用.安裝protobuf 分為編譯器和運行時兩部分. 編譯器直接使用預編…

計算機無法裝補丁,電腦無法安裝kb4012212補丁如何處理|電腦無法安裝kb4012212補丁的處理方法...

最近,不少用戶的電腦都被《永恒之藍》病毒侵襲,因此微軟官方推出了預防補丁 — kb4012212,正常系統只要安裝該補丁就能避免電腦遭到傷害。不過,有用戶反饋自己遇到了電腦無法安裝kb4012212補丁的情況,該怎么辦呢&#…

shell181網格劃分_ANSYS中SHELL181單元理解和參數詳解?-

頂部和底部的平均值不合適的時候,你應該用這個選項來得到正確的中見面的結果(薄膜結果);例子中包含黑線性材料特性的中間面應力、應變 ,以及在包含諸如譜分析等測長操作的模態疊加之后的中間面結果。 KEYOPT(9) 1 用來從用戶子程序中讀取初始厚度數據。…

使用計算機繪制景物圖像的兩個主要步驟是,計算機11考試.doc

文檔介紹:第五章[4]. 一張CD盤片上存儲的立體聲高保真全頻帶數字音樂約可播放一小時,則其數據量大約是______。A、800MBB、635MBC、400MBD、1GB[6]. 衛星數字電視和新一代數字視盤DVD采用______作為數字視頻壓縮標準。MPEG-2 | MPEG2[10]. 聲卡在計算機中用于完成聲…