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

從小工到專家的 Java 進(jìn)階之旅:HotSpot虛擬機(jī)對象探秘

開發(fā) 前端
Java 堆中將可能會(huì)劃分出一塊內(nèi)存來作為句柄池,reference 中存儲(chǔ)的是對象的句柄地址,句柄中包含了對象實(shí)例數(shù)據(jù)和類型數(shù)據(jù)各自的具體地址信息。好處是解耦,reference 中存儲(chǔ)的是穩(wěn)定句柄地址,在對象被移動(dòng)(垃圾回收等)時(shí)只會(huì)改變句柄中實(shí)例數(shù)據(jù)指針,而 reference 本身不需要修改。

今天我們一起看一下HotSpot虛擬機(jī)中的對象。

對象的創(chuàng)建(以 new 關(guān)鍵字為例)

創(chuàng)建過程

  1. Java 虛擬機(jī)遇到字節(jié)碼new指令,首先檢查new指令參數(shù)是否能夠在常量池中定位到一個(gè)類的符號引用

如果是,繼續(xù)下一步

如果否,執(zhí)行類加載過程

如果是,檢查這個(gè)符號引用代表的類是否已經(jīng)被加載、解析和初始化

如果否,執(zhí)行類加載

  1. 虛擬機(jī)為新生對象分配內(nèi)存(對象所需內(nèi)存大小在類加載完成后即可確定)
  2. 虛擬機(jī)將分配的內(nèi)存空間(不包括對象頭)初始化為零值。
  3. 虛擬機(jī)對對象進(jìn)行必要設(shè)置,比如設(shè)置對象頭信息:
  4. 對象是哪個(gè)類的實(shí)例
  5. 如何找到類的元數(shù)據(jù)信息
  6. 對象的哈希碼
  7. 對象的 GC 分代年齡
  8. new指令之后會(huì)接著執(zhí)行<init>()方法,按照程序員意愿初始化對象

內(nèi)存分配

  1. 內(nèi)存分配算法:擬機(jī)為新生對象分配內(nèi)存有指針碰撞和空閑列表兩種方式,具體選擇哪種,取決于垃圾收集器是否帶有空間壓縮整理的能力。Serial、ParNew 帶壓縮整理,采用指針碰撞;CMS 基于清除算法,采用空閑列表。

指針碰撞 (Bump The Pointer):堆內(nèi)存絕對規(guī)整,已使用的在一邊,未使用的在另外一遍,中間通過指針作為分界點(diǎn)指示器,分配內(nèi)存即移動(dòng)指針。

空閑列表 (Free List):堆內(nèi)存不規(guī)整,已使用與未使用相互交錯(cuò),需要維護(hù)一個(gè)列表,記錄哪些內(nèi)存塊可用,分配的時(shí)候從列表中找到一塊足夠大的空間劃分給對象實(shí)例,并更新列表記錄。

  1. 線程安全問題:創(chuàng)建對象比較頻繁,需要保證線程安全,避免多個(gè)對象分配了相同的內(nèi)存區(qū)域,一般是兩種方式:

同步處理:虛擬機(jī)采用CAS+失敗重試方式保證更新操作的原子性

本地線程分配緩沖:把內(nèi)存分配的動(dòng)作按照線程劃分在不同空間之中進(jìn)行,即每個(gè)線程在 Java 堆中預(yù)先分配一小塊內(nèi)存,稱為本地線程分配緩沖 (Thread Local Allocation Buffer, TLAB),哪個(gè)線程要分配內(nèi)存,就在哪個(gè)線程的本地緩沖區(qū)中分配,只有本地緩沖緩沖區(qū)用完了,分配新的緩沖區(qū)時(shí)才需要同步鎖定。是否使用 TLAB,可以通過參數(shù)-XX:+/-UseTLAB參數(shù)設(shè)定。

對象的內(nèi)存布局

  1. 對象頭 (Header)

用于存儲(chǔ)對象自身運(yùn)行時(shí)數(shù)據(jù):哈希碼 (Hash Code)、GC 分代年齡、鎖狀態(tài)標(biāo)志、線程持有的鎖、偏向線程 ID、偏向時(shí)間戳等,長度在 32 位和 64 位虛擬機(jī)分別是 32 比特和 64 比特,官方稱為 Mark Word。

類型指針,即對象指向它的類型元數(shù)據(jù)指針,Java 虛擬機(jī)通過這個(gè)指針來確定該對象是哪個(gè)類的實(shí)例。

如果對象是數(shù)組,還有一個(gè)數(shù)據(jù)記錄數(shù)組長度

  1. 實(shí)例數(shù)據(jù) (Instance Data):即程序代碼里面定義的各種類型的字段內(nèi)容。存儲(chǔ)順序受虛擬機(jī)分配策略 (-XX:FieldsAllocationStyle 參數(shù))和字段在 Java 源碼中定義順序影響。HotSpot 虛擬機(jī)默認(rèn)分配順序?yàn)?longs/doubles、ints、shorts/charts、bytes/booleans、oops(Ordinary Object Pointers, OOPS),即相同寬度字段被分配到一起存放,在滿足這個(gè)前提條件情況下,在父類中定義的變了會(huì)出現(xiàn)在子類之前。如果 HotSpot 虛擬機(jī)的+XX:CompactFields 參數(shù)設(shè)置為 true,子類中較窄的變量也允許插入父類變量的空隙中,以節(jié)省空間。
  2. 對齊填充 (Padding):占位符作用。HotSpot 虛擬機(jī)的自動(dòng)內(nèi)存管理系統(tǒng)要求對象起始地址必須是 8 字節(jié)的整數(shù)倍。

對象的訪問定位

Java 程序會(huì)通過棧上的 reference 數(shù)據(jù)來操作堆上的具體對象,主流的訪問方式主要有使用句柄和直接指針兩種:

  • 使用句柄:Java 堆中將可能會(huì)劃分出一塊內(nèi)存來作為句柄池,reference 中存儲(chǔ)的是對象的句柄地址,句柄中包含了對象實(shí)例數(shù)據(jù)和類型數(shù)據(jù)各自的具體地址信息。好處是解耦,reference 中存儲(chǔ)的是穩(wěn)定句柄地址,在對象被移動(dòng)(垃圾回收等)時(shí)只會(huì)改變句柄中實(shí)例數(shù)據(jù)指針,而 reference 本身不需要修改。
  • 直接指針:Java 堆中的對象布局必須考慮如何放置訪問類型數(shù)據(jù)的相關(guān)信息,reference 中存儲(chǔ)的是對象地址。好處是速度快,節(jié)省一次指針定位時(shí)間開銷,HotSpot 主要使用直接指針。

使用句柄使用句柄

直接指針直接指針


責(zé)任編輯:武曉燕 來源: 看山的小屋
相關(guān)推薦

2018-06-29 14:48:24

數(shù)據(jù)庫MySQL必讀書籍

2019-11-13 14:55:16

小工Linux專家

2010-11-05 09:47:11

OracleJava虛擬機(jī)

2012-08-06 09:26:19

Java虛擬機(jī)垃圾回收

2021-09-10 00:34:22

Java 線程啟動(dòng)

2020-09-02 07:03:04

虛擬機(jī)HotSpotJava

2018-07-25 14:41:29

Java虛擬機(jī)Android

2025-02-05 11:43:28

2014-02-21 11:20:34

KVMXen虛擬機(jī)

2018-10-25 09:04:56

Java虛擬機(jī)JVM

2012-05-18 10:22:23

2017-07-11 09:35:10

大數(shù)據(jù)linuxjava

2018-06-19 15:39:21

HeapJava虛擬機(jī)

2011-06-22 13:35:55

JVM

2014-12-18 09:41:44

虛擬化遷移

2020-01-17 10:52:37

無服務(wù)器容器技術(shù)

2009-08-28 11:54:27

VMware虛擬機(jī)

2024-03-18 09:44:02

HashMap算法Java

2009-06-12 16:02:58

裝載Java虛擬機(jī)

2013-07-17 09:32:58

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 男女羞羞视频网站 | 亚洲国产一区在线 | 日韩国产精品一区二区三区 | 久久久久无码国产精品一区 | 亚洲免费av一区 | 成人a视频在线观看 | 欧美精品久久久久 | 亚洲国产精品一区二区三区 | 青青操91| 久久看精品 | 亚洲 成人 av| 日日噜噜噜夜夜爽爽狠狠视频97 | 国产美女高潮 | 日韩免费网站 | www国产成人免费观看视频,深夜成人网 | 99国产精品久久久 | 天天躁天天操 | 久久在线 | 五月激情婷婷网 | 九九色九九 | 全部免费毛片在线播放网站 | 99re6在线视频精品免费 | 亚洲成人高清 | 91色综合 | 免费一区二区三区 | 岛国av免费观看 | 国产精品日产欧美久久久久 | 欧美日韩一二区 | 欧美一区二区三区在线 | 欧美日韩一区二区三区在线观看 | 久久在线看 | 男女性毛片 | 久久国产精品网站 | 久久夜视频 | 激情免费视频 | 毛片网站在线观看 | 国产一级毛片精品完整视频版 | 日日夜夜精品视频 | 97久久精品午夜一区二区 | 毛片站 | www.亚洲.com |