亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JVM內存的那些事

2019-11-11 05:13:24
字體:
來源:轉載
供稿:網友

學習java的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:183993990  我們一起學Java!

前言

對于C語言開發的程序員來說,在內存管理方面,必須負責每一個對象的生命周期,從有到無。對于Java程序員你來說,在虛擬機內存管理的幫助下,不需要為每個new對象都匹配free操作,內存泄露和內存溢出等問題也不太容易出現,不過也正是因為把內存管理交給了虛擬機,一旦運行中的程序出現了內存泄露問題,給排查過程造成很大困難。所以只有理解了Java虛擬機的運行機制,才能夠運籌帷幄于各種代碼。本文以HotSpot為例說說虛擬機的那些事。

JAVA虛擬機把管理的內存劃分為幾個不同的數據區。

Java堆

Java堆是被所有線程共享的一塊內存區域,主要用于存放對象實例,Java虛擬機規范中有這樣一段描述:所有的對象實例和數據都要在堆上進行分配。為對象分配內存就是把一塊大小確定的內存從堆內存中劃分出來,通常有兩種方法實現:

1 、指針碰撞法假設Java堆中內存時完整的,已分配的內存和空閑內存分別在不同的一側,通過一個指針作為分界點,需要分配內存時,僅僅需要把指針往空閑的一端移動與對象大小相等的距離。

2、空閑列表法事實上,Java堆的內存并不是完整的,已分配的內存和空閑內存相互交錯,JVM通過維護一個列表,記錄可用的內存塊信息,當分配操作發生時,從列表中找到一個足夠大的內存塊分配給對象實例,并更新列表上的記錄。

對象創建是一個非常頻繁的行為,進行堆內存分配時還需要考慮多線程并發問題,可能出現正在給對象A分配內存,指針或記錄還未更新,對象B又同時分配到原來的內存,解決這個問題有兩種方案:1、采用CAS保證數據更新操作的原子性;2、把內存分配的行為按照線程進行劃分,在不同的空間中進行,每個線程在Java堆中預先分配一個內存塊,稱為本地線程分配緩沖(Thread Local Allocation Buffer, TLAB);

Java棧

Java棧是線程私有的,每個線程對應一個Java棧,每個線程在執行一個方法時會創建一個對應的棧幀(Stack Frame),棧幀負責存儲局部變量變量表、操作數棧、動態鏈接和方法返回地址等信息。每個方法的調用過程,相當于棧幀在Java棧的入棧和出棧過程。

局部變量表 用于存放方法參數和方法內部定義的局部變量,其大小在代碼編譯期間已經確定,在方法運行期間不會改變。局部變量表以變量槽(Slot)為最小存儲單位,每個Slot能夠存放一個boolean、byte、char、shot、int、float、reference和returnAddress類型的32位數據,對于64位的數據類型long和double,虛擬機會以高位對齊的方式為其分配兩個連續的Slot空間。

在方法執行時,如果是實例方法,即非static方法,局部變量表中第0位Slot默認存放對象實例的引用,在方法中可以通過關鍵字 this 進行訪問,方法參數按照參數列表順序,從第1位Slot開始分配,方法內部變量則按照定義順序進行分配其余的Slot。

class test { public int calc(int a, int b, String Operation) { operation = "+"; return a + b; } public void main(String args[]) { calc(100, 200, "+"); }}

對應的局部變量表如下:

使用 javap -c 命令查看方法calc的字節碼

其中iload_1和iload_2分別從局部變量表中的第1位和第2位中加載數據。

方法區

方法區和Java堆一樣,是所有線程共享的內存區域,用于存放已被虛擬機加載的類信息、常量、靜態變量和即時編譯器編譯后的代碼等數據。運行時常量池是方法區的一部分,用于存放編譯期間生成的各種字面常量和符號引用。

指令計數器

指令計數器是線程私有的,每個線程都有獨立的指令計數器,計數器記錄著虛擬機正在執行的字節碼指令的地址,分支、循環、跳轉、異常處理和線程恢復等操作都依賴這個計數器完成。如果線程執行的是native方法,這個計數器則為空。

對象的內存布局

對象在內存中布局可以分成三塊區域:對象頭、實例數據和對齊填充。1、對象頭對象頭包括兩部分信息:運行時數據和類型指針,如果對象是一個數組,還需要一塊用于記錄數組長度的數據。

1.1、運行時數據包括哈希碼(HashCode)、GC分代年齡、鎖狀態標志、線程持有的鎖、偏向鎖ID和偏向時間戳等,這部分數據在32位和64位虛擬機中的長度分別為32bit和64bit,官方稱為"Mark Word"。Mark Word被設計成非固定的數據結構,以實現在有限空間內保存盡可能多的數據。32位的虛擬機中,對象未被鎖定的狀態下,Mark Word的32bit中25bit存儲對象的HashCode、4bit存儲對象分代年齡、2bit存儲鎖標志位、1bit固定為0,具體如下:

其它狀態(輕量級鎖定、重量級鎖定、GC鎖定、可偏向鎖)下Mark Word的存儲內容如下:

1.2、對象頭的類型指針指向該對象的類元數據,虛擬機通過這個指針可以確定該對象是哪個類的實例。

2、實例數據實例數據就是在程序代碼中所定義的各種類型的字段,包括從父類繼承的,這部分的存儲順序會受到虛擬機分配策略和字段在源碼中定義順序的影響。3、對齊填充由于HotSpot的自動內存管理要求對象的起始地址必須是8字節的整數倍,即對象的大小必須是8字節的整數倍,對象頭的數據正好是8的整數倍,所以當實例數據不夠8字節整數倍時,需要通過對齊填充進行補全。

學習Java的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:183993990  我們一起學Java!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频亚洲| 在线a欧美视频| 日韩精品中文字幕在线| 精品国产依人香蕉在线精品| 深夜福利亚洲导航| 亚洲综合日韩中文字幕v在线| 久久中文字幕视频| 国产97在线|日韩| 亚洲欧洲美洲在线综合| 欧美夫妻性生活视频| 日韩精品极品毛片系列视频| 成人免费福利在线| 在线播放亚洲激情| 国产欧美日韩视频| 亚州成人av在线| 亚洲日本成人网| 欧美精品免费播放| 国产精品网站入口| 国产精品老女人精品视频| 亚洲精美色品网站| 国产精品99久久久久久白浆小说| wwwwwwww亚洲| 成人免费网站在线| 欧美日韩一区免费| 欧美日韩综合视频| 欧美日韩中文在线观看| 亚洲国模精品一区| 91精品国产高清久久久久久91| 欧美尺度大的性做爰视频| 国产精品成人久久久久| 国产www精品| 中文字幕亚洲欧美| 日韩成人中文字幕在线观看| 国产色视频一区| 欧美中文在线观看国产| 欧美国产高跟鞋裸体秀xxxhd| 欧美激情视频三区| 欧美日韩国产精品专区| 国产精品美女主播在线观看纯欲| 国产亚洲精品一区二区| 奇米影视亚洲狠狠色| 黑丝美女久久久| 欧美福利小视频| 欧美激情第一页xxx| 日韩精品视频三区| 亚洲美女久久久| 久久久久久久国产精品视频| 97视频色精品| 久久久久久久国产精品| 国产不卡一区二区在线播放| 国产精品普通话| 亚洲欧美中文字幕在线一区| 国产精品99久久久久久久久久久久| 九九久久久久久久久激情| 九九久久久久99精品| 亚洲免费视频网站| 欧美日韩视频在线| 黄网动漫久久久| 91九色国产视频| 欧美日韩免费在线| 亚洲欧美激情精品一区二区| 亚洲精品自在久久| 亚洲国内高清视频| 中文字幕日韩欧美在线| 精品亚洲一区二区三区| 日韩一中文字幕| 亚洲аv电影天堂网| 日韩欧美亚洲成人| 麻豆成人在线看| 日韩视频免费在线观看| 亚洲欧美日韩中文在线制服| 97精品国产91久久久久久| 日韩av手机在线| 黑人与娇小精品av专区| 亚洲精品电影网| 成人网址在线观看| 欧美成人全部免费| 欧美日韩激情视频8区| 一本一本久久a久久精品综合小说| 日韩高清有码在线| 国产精品成人国产乱一区| 亚洲欧美中文日韩在线v日本| 国产精品免费看久久久香蕉| 97精品国产97久久久久久春色| 97精品国产aⅴ7777| 97色在线观看| 日本亚洲欧美成人| 久久69精品久久久久久国产越南| 久久久精品视频在线观看| 精品国偷自产在线视频99| 久久久天堂国产精品女人| 日韩av不卡在线| 欧美大片网站在线观看| 久久久久久伊人| 亚洲欧洲国产精品| 欧美性高跟鞋xxxxhd| 亚洲最新av在线网站| 国产精品成人va在线观看| 国产精品福利无圣光在线一区| 欧美成人性色生活仑片| 日本中文字幕成人| 欧美—级高清免费播放| 亚洲一区二区三区久久| 久久国产精品影片| 亚洲成人精品av| 国产91精品高潮白浆喷水| 成人精品久久久| 九九精品在线播放| 久久久人成影片一区二区三区| 91视频免费网站| 一区二区三区 在线观看视| 成人中心免费视频| 欧美久久精品一级黑人c片| 国产剧情久久久久久| 国产v综合v亚洲欧美久久| 97超碰国产精品女人人人爽| 国产在线精品一区免费香蕉| 伊人伊人伊人久久| 热久久视久久精品18亚洲精品| 欧美精品免费在线| 91在线免费网站| 欧美尺度大的性做爰视频| 国产网站欧美日韩免费精品在线观看| 九九久久精品一区| 久久精品国产99国产精品澳门| 国产欧美va欧美va香蕉在| 欧美成人亚洲成人日韩成人| 国产在线999| 欧美壮男野外gaytube| 69久久夜色精品国产69乱青草| 亚洲国产日韩欧美在线图片| 国产精品第一第二| 精品日本高清在线播放| 久久婷婷国产麻豆91天堂| 精品国产31久久久久久| 欧美日韩亚洲高清| 性夜试看影院91社区| 久久精品电影网| 久久久久久久久久亚洲| 少妇久久久久久| 欧美国产日韩一区二区在线观看| 久久亚洲欧美日韩精品专区| 欧美性xxxxxxx| 亚洲精品成人久久久| 亚洲精品动漫久久久久| 亚洲欧美日韩一区在线| 欧美视频13p| 亚洲精品国产精品自产a区红杏吧| 九九热精品在线| 亚洲欧美中文在线视频| 欧美中文字幕在线视频| 精品久久久视频| 亚洲缚视频在线观看| 久久久免费精品| 国内精品久久影院| 国产精品一二三在线| 成人精品久久久| 亚洲欧美日韩天堂一区二区| 超碰日本道色综合久久综合| 4444欧美成人kkkk| 精品偷拍各种wc美女嘘嘘| 国产精品高潮呻吟久久av黑人| 日韩av影视综合网| 久久久久久久久久久免费|