一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 計算一個Java對象占用字節數的方法

計算一個Java對象占用字節數的方法

2019-12-08 19:10shichen2014 JAVA教程

這篇文章主要介紹了計算一個Java對象占用字節數的方法,較為詳細的分析了Java中各類對象所占用的字節數,需要的朋友可以參考下

本文實例講述了如何計算(或者說,估算)一個Java對象占用的內存數量的方法。分享給大家供大家參考。具體分析如下:

通常,我們談論的堆內存使用的前提是以“一般情況”為背景的。不包括下面兩種情形:
 
某些情況下,JVM根本就沒有把Object放入堆中。例如:原則上講,一個小的thread-local對象存在于棧中,而不是在堆中。
被Object占用內存的大小依賴于Object的當前狀態。例如:Object的同步鎖是否生效,或者,Object是否正在被回收。
我們先來看看在堆中單個的Object長什么樣子

計算一個Java對象占用字節數的方法

在堆中,每個對象由四個域構成(A、B、C 和 D),下面我們逐個解釋一下:
 
A:對象頭,占用很少的字節,表述Object當前狀態的信息
B:基本類型域占用的空間(原生域指 int、boolean、short等)
C:引用類型域占用的空間(引用類型域指 其他對象的引用,每個引用占用4個字節)
D:填充物占用的空間(后面說明什么是填充物)

下面我們對A、B、C 和 D 逐一解釋

A:對象頭
內存中,每個對象占用的總空間不僅包含對象內聲明的變量所需要的空間,還包括一些額外信息,比如:對象頭 和 填充物。“對象頭”的作用是用來記錄一個對象的實例名字、ID 和 實例狀態(例如,當前實例是否“可到達”,或者當前鎖的狀態等等)。
在當前的JVM版本中(Hotspot),“對象頭”占用的字節數如下:
 
一個普通對象,占用8 bytes
數組,占用 12 bytes,包含普通對象的 8 bytes + 4 bytes(數組長度)

B:基本類型
 
boolean、byte 占用 1 byte,char、short 占用 2 bytes,int、float 占用 4 bytes,long、double 占用 8 bytes

C:引用類型
每個引用類型占用 4 bytes

D:填充物
在Hotspot中,每個對象占用的總空間是以8的倍數計算的,對象占用總空間(對象頭+聲明變量)不足8的倍數時候,自動補齊。而,這些被填充的空間,我們可以稱它為“填充物”。我們看下具體實例:
 
一個空對象(沒有聲明任何變量)占用 8 bytes -- > 對象頭 占用 8 bytes
只聲明了一個boolean類型變量的類,占用 16 bytes --> 對象頭(8 bytes) + boolean (1 bytes) + 填充物(7 bytes)
聲明了8個boolean類型變量的類,占用 16 bytes --> 對象頭(8 bytes) + boolean (1 bytes) * 8

通過上面的實例,更有助于我們加深對Java程序設計的理解。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 4444亚洲国产成人精品 | 九九99热久久精品在线6 | 乌克兰bbw | 粉嫩高中生第一次不戴套 | 精品国产福利在线 | 果冻传媒在线播放1 | www.av在线视频| 国产精品一二区 | 国语刺激对白勾搭视频在线观看 | 色在线亚洲视频www 色欲麻豆国产福利精品 | 884aa草莓视频 | 国产成人一区二区三区 | 日韩在线一区二区三区免费视频 | 女人和拘做受全过程免费 | 亚洲AV永久无码精品澳门 | 免费看美女被靠到爽的视频 | 校花的第一次好紧好爽 | 亚洲大片免费看 | www.爱操| 日本卡一卡2卡3卡4精品卡无人区 | 亚洲高清一区二区三区久久 | 日本一区二区视频免费播放 | 亚洲激情自拍偷拍 | 男人猛进女人屁股免费 | 521色香蕉网站在线观看 | 亚洲电影成人 成人影院 | 超h 超重口 高h 污肉1v1 | 欧美精品亚洲精品日韩1818 | 青青在线观看视频 | 亚洲小视频在线 | 国产a免费观看 | 美女把小内内脱个精光打屁屁 | 鬼畜重口高h合集长短篇 | 亚洲国产成人资源在线桃色 | 成人亚洲欧美日韩中文字幕 | 国产女乱淫真高清免费视频 | 合欢视频免费 | 亚洲国产精品久久网午夜 | 污网站免费观看在线高清 | 欧美男人天堂 | 91久久偷偷做嫩草影院电 |