最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

計(jì)算一個Java對象占用字節(jié)數(shù)的方法

 更新時間:2015年01月13日 10:53:32   投稿:shichen2014  
這篇文章主要介紹了計(jì)算一個Java對象占用字節(jié)數(shù)的方法,較為詳細(xì)的分析了Java中各類對象所占用的字節(jié)數(shù),需要的朋友可以參考下

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

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

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

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

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

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

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

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

通過上面的實(shí)例,更有助于我們加深對Java程序設(shè)計(jì)的理解。

相關(guān)文章

最新評論

察哈| 拉萨市| 信阳市| 南岸区| 盖州市| 墨竹工卡县| 庐江县| 竹山县| 富平县| 高清| 曲阳县| 曲水县| 安泽县| 巴南区| 西峡县| 石家庄市| 谷城县| 福建省| 鹤峰县| 河北省| 西安市| 巩留县| 公主岭市| 峨边| 开鲁县| 平和县| 平果县| 元朗区| 盘山县| 龙胜| 静乐县| 宁德市| 砚山县| 旅游| 巫溪县| 河东区| 大洼县| 肇庆市| 舞阳县| 宣威市| 二手房|