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

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

JVM內存的那些事

2019-11-11 04:39:31
字體:
來源:轉載
供稿:網友

學習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
国产欧美精品一区二区三区-老狼| 中文字幕av日韩| 成人观看高清在线观看免费| 国产精品久久久久77777| 亚洲国产精品va| 欧美性xxxx18| 日韩三级成人av网| 国产自产女人91一区在线观看| 久久精品视频网站| 国产精品久久久久久亚洲影视| 中文字幕在线观看亚洲| 日韩在线免费视频观看| 欧美孕妇性xx| 国产成人aa精品一区在线播放| 欧美激情伊人电影| 欧美日韩亚洲91| 神马久久久久久| 粉嫩av一区二区三区免费野| 久久噜噜噜精品国产亚洲综合| 91色中文字幕| 欧美亚洲另类激情另类| 欧美成人小视频| 亚洲国产日韩欧美综合久久| 久久中文久久字幕| 91久久精品久久国产性色也91| 亚洲国产精品电影在线观看| 成人午夜两性视频| 91sao在线观看国产| 欧美激情啊啊啊| 国产极品精品在线观看| 国产精品毛片a∨一区二区三区|国| 91亚洲精华国产精华| 精品自在线视频| 久久久久久久久久久国产| 日本高清不卡在线| 欧美精品www在线观看| 欧洲午夜精品久久久| 91青草视频久久| 色阁综合伊人av| 国产精品日韩欧美综合| 美女视频久久黄| 亚洲天堂2020| 日韩在线播放一区| 欧美福利视频在线| 国产成人亚洲综合91精品| 欧美激情三级免费| 精品亚洲国产成av人片传媒| 久久久精品国产一区二区| 久久久久久久久久久亚洲| 午夜精品久久久99热福利| 91久久久久久久一区二区| 在线性视频日韩欧美| 亚洲第一男人av| 色黄久久久久久| 欧美激情视频给我| 国产精品亚洲精品| 91影视免费在线观看| 国产精品人成电影| 久热爱精品视频线路一| 亚洲人午夜精品| 5252色成人免费视频| 欧美视频一二三| 久久久国产一区二区三区| 欧美亚洲另类激情另类| 国产精品日日做人人爱| 日韩精品www| 国产综合在线观看视频| 这里只有精品在线观看| 亚洲第一页中文字幕| 欧美在线一区二区三区四| 欧美激情视频网| 欧美在线视频一区二区| 成人激情免费在线| 亚洲人成网站在线播| 亚洲一品av免费观看| 国产精品视频播放| 日韩电影在线观看永久视频免费网站| 中文字幕亚洲欧美日韩2019| 久久久久久国产| 久久国产精品网站| 中文字幕成人精品久久不卡| 亚洲国产另类 国产精品国产免费| 国产视频999| 欧美激情精品久久久久久变态| 日韩av在线直播| 欧美日韩裸体免费视频| 亚洲最大av在线| 正在播放亚洲1区| 亚州成人av在线| 欧美激情国内偷拍| 国内外成人免费激情在线视频网站| 欧美一级电影久久| 日韩最新免费不卡| 中文字幕久热精品视频在线| 久久久影视精品| 国产精品成av人在线视午夜片| 亚洲精品aⅴ中文字幕乱码| 91成品人片a无限观看| 欧美亚洲国产日本| 久久久之久亚州精品露出| 日韩av影视在线| 亚洲视频axxx| 欧美性xxxxxx| 日韩女优人人人人射在线视频| 国产精品久久婷婷六月丁香| 欧美大秀在线观看| 亚洲性线免费观看视频成熟| 成人免费看黄网站| 中日韩午夜理伦电影免费| 国产日韩在线播放| 狠狠躁夜夜躁久久躁别揉| 久久国产精品视频| 午夜欧美不卡精品aaaaa| 日韩欧美国产一区二区| 欧洲s码亚洲m码精品一区| 日韩激情av在线播放| 中文字幕自拍vr一区二区三区| 亚洲精品影视在线观看| 国产精品久久久91| 日韩中文字幕视频在线观看| 国产精品99久久久久久www| 成人午夜激情免费视频| 91精品在线观看视频| 疯狂做受xxxx高潮欧美日本| 8090理伦午夜在线电影| 日本最新高清不卡中文字幕| 欧美日韩中文在线观看| 日韩免费看的电影电视剧大全| 最近免费中文字幕视频2019| 国产精品久久久久久久久久新婚| 亚洲视频在线观看网站| 亚洲欧美日韩一区在线| 欧美与欧洲交xxxx免费观看| 亚洲国产精品电影| 亚洲自拍高清视频网站| 国产91在线高潮白浆在线观看| 91po在线观看91精品国产性色| 亚洲精品在线看| 国产精品美女主播| 亚洲人a成www在线影院| 不卡av电影院| 国产精品夜色7777狼人| 欧美激情国产日韩精品一区18| 中文字幕亚洲情99在线| 成人精品视频久久久久| 91色琪琪电影亚洲精品久久| 91精品国产高清| 欧美激情在线有限公司| 成人免费福利视频| 国产精品自产拍在线观看中文| 日韩av在线直播| 成人h片在线播放免费网站| 亚洲tv在线观看| 日韩精品在线观看一区二区| 国产亚洲综合久久| 日韩成人激情影院| 国产97色在线| 亚洲激情第一页| 亚洲精品久久久久中文字幕二区| 97在线观看视频| 久久久在线免费观看| 91精品免费视频| 国产欧美va欧美va香蕉在线| www.亚洲人.com|