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

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

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程序設計的理解。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天堂网站天堂小说 | 国产a一级| 成人看的羞羞视频免费观看 | 成人操| 四虎国产精品免费久久麻豆 | 国产综合久久久久 | 春宵福利网站在线观看 | 俄罗斯男男激情1069gay | 色综合色狠狠天天久久婷婷基地 | 特黄特色大片免费高清视频 | 日本福利视频网站 | gangbang日本| 国产区成人精品视频 | 思思91精品国产综合在线 | 亚洲高清中文字幕 | 调教女高中生第3部分 | 国产99精品免费视频看6 | 性色老女人| 久久受www免费人成_看片中文 | 国产亚洲精aa在线观看不卡 | 操国产美女 | 美女视频一区二区三区在线 | 欧美free激情野战hd | 深夜在线观看 | 12345国产精品高清在线 | 日本五级床片全都免费播放 | 国产在线精品观看 | 国内精品国语自产拍在线观看55 | 欧美一级视频在线 | poverty中国老妇人 | 日本成日本片人免费 | 日韩视频在线免费观看 | 国产日韩成人 | 色噜噜狠狠狠综合曰曰曰88av | 歪歪漫画a漫入口 | 天天操天天舔 | 金牛网155755水心论坛黄大父母 | 亚欧有色在线观看免费版高清 | h肉动漫在线视频无修无遮挡 | japanese乱子mate | 亚洲精品成人a |