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

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

JVM內存的那些事

2019-11-11 05:09:50
字體:
來源:轉載
供稿:網友

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国内产的精品视频在线观看| 大桥未久av一区二区三区| 精品偷拍一区二区三区在线看| 国产一区二区三区视频在线观看| 中文字幕欧美精品日韩中文字幕| 色妞色视频一区二区三区四区| 91成人天堂久久成人| 亚洲欧美综合v| 国产91精品高潮白浆喷水| 日韩在线视频观看| 伊人成人开心激情综合网| 欧美视频一区二区三区…| 亚洲娇小xxxx欧美娇小| 日本精品中文字幕| 久久久亚洲天堂| 亚洲色图25p| 国产一区欧美二区三区| 欧美日韩国产麻豆| 韩国v欧美v日本v亚洲| 91久久久久久久久久久久久| 国产精品www色诱视频| 日韩极品精品视频免费观看| www.日韩.com| 成人免费高清完整版在线观看| 欧美一级片免费在线| 欧美精品在线极品| 亚洲国产中文字幕在线观看| 国产在线a不卡| 亚洲国产欧美自拍| 亚洲欧美精品suv| 日韩免费观看视频| 欧美在线视频免费观看| 91精品国产综合久久香蕉最新版| 国产一区二区三区网站| 日韩在线高清视频| 91影院在线免费观看视频| 国内精品久久久久久中文字幕| 国产精品96久久久久久又黄又硬| 日韩福利在线播放| 91网站免费观看| 久久电影一区二区| 欧美高清在线播放| 国产精品 欧美在线| 欧美最猛性xxxx| 乱亲女秽乱长久久久| 中文字幕欧美日韩精品| 色哟哟亚洲精品一区二区| 精品国产精品自拍| 欧美人交a欧美精品| 亚洲激情久久久| 日韩欧亚中文在线| 欧美午夜精品在线| 91tv亚洲精品香蕉国产一区7ujn| 欧美在线视频观看免费网站| 清纯唯美日韩制服另类| 中文字幕日韩免费视频| 精品久久久久久久久久久久久| 欧美一区第一页| 69视频在线免费观看| 日韩高清免费在线| 国产精品爽黄69天堂a| 欧美老肥婆性猛交视频| 国内精品一区二区三区四区| 欧美性理论片在线观看片免费| 亚洲国语精品自产拍在线观看| 成人黄色av播放免费| 亚洲无线码在线一区观看| 国产精品久久久久久久久久三级| 成年人精品视频| 欧美视频在线观看 亚洲欧| 日韩高清电影免费观看完整| 精品欧美aⅴ在线网站| 中文字幕在线国产精品| 亚洲人成电影在线| 成人日韩在线电影| 久久国产精品影片| 欧美亚洲成人精品| 国产成人精品999| 国产成人精品视| 国产日韩在线亚洲字幕中文| 国产精品久久久久久久久借妻| 久久久久久亚洲精品中文字幕| 欧美中文在线观看国产| 欧美日韩一区二区在线播放| 亚洲图片欧洲图片av| 亚洲天堂精品在线| 欧美精品福利视频| 日韩黄在线观看| 日韩亚洲成人av在线| 亚洲欧美综合另类中字| 亚洲国产成人精品久久久国产成人一区| 精品久久久久久久久久久| 日本精品中文字幕| 日韩一区二区三区xxxx| 久久久视频精品| 欧美日韩美女在线| 国产精品国产三级国产aⅴ浪潮| 欧美最近摘花xxxx摘花| 欧美精品电影在线| 国产69精品99久久久久久宅男| 欧美中文字幕在线播放| 国产精品精品久久久| 亚洲欧美国产日韩中文字幕| 久久精品在线视频| 欧美小视频在线观看| 国产va免费精品高清在线观看| 国产suv精品一区二区三区88区| 国产精品久久久久免费a∨| 久久国产精彩视频| 国产精品美女视频网站| 欧美精品国产精品日韩精品| 国产精品嫩草影院久久久| 久久九九亚洲综合| 日韩精品极品在线观看| 亚洲精品视频在线观看视频| 国产精品亚洲欧美导航| 一本色道久久综合狠狠躁篇的优点| 亚洲欧洲中文天堂| 国产剧情日韩欧美| 亚洲国产私拍精品国模在线观看| 91av在线免费观看视频| 97香蕉超级碰碰久久免费软件| 日韩欧美在线免费观看| 久久av在线播放| 久久夜精品va视频免费观看| 亚洲综合在线小说| 色阁综合伊人av| 亚洲成年人在线| 精品久久久久久亚洲精品| 欧美视频在线观看免费网址| 日韩一区二区欧美| 亚洲国产精品va在线| 欧美视频第一页| 97在线观看免费| 国产中文字幕日韩| 国产一区私人高清影院| 亚洲欧美制服中文字幕| 国模私拍视频一区| 欧美日韩免费在线观看| 国产日韩在线观看av| 日韩中文字幕在线播放| 亚洲精品一区二区三区婷婷月| 日韩免费不卡av| 国产精品一区专区欧美日韩| 色多多国产成人永久免费网站| 欧美精品videofree1080p| 亚洲欧美国产一本综合首页| 人九九综合九九宗合| 日韩在线一区二区三区免费视频| 美女久久久久久久| 日韩欧中文字幕| 成人亚洲激情网| 日韩精品视频三区| 国产日韩欧美中文在线播放| 成人性教育视频在线观看| 欧美一级高清免费播放| 成人免费网站在线观看| 日韩精品小视频| 精品网站999www| 日韩欧美在线观看| 九九综合九九综合| 欧美激情精品久久久久久久变态| 国产精品av在线播放| 亚洲人精选亚洲人成在线|