亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • sa-token?路由攔截式鑒權(quán)使用示例詳解

    sa-token?路由攔截式鑒權(quán)使用示例詳解

    這篇文章主要為大家介紹了sa-token?路由攔截式鑒權(quán)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java使用設(shè)計(jì)模式中迭代器模式構(gòu)建項(xiàng)目的代碼結(jié)構(gòu)示例

    Java使用設(shè)計(jì)模式中迭代器模式構(gòu)建項(xiàng)目的代碼結(jié)構(gòu)示例

    這篇文章主要介紹了Java使用設(shè)計(jì)模式中迭代器模式構(gòu)建項(xiàng)目的代碼結(jié)構(gòu)示例,迭代器模式能夠?qū)υL問者隱藏對象的內(nèi)部細(xì)節(jié),需要的朋友可以參考下
    2016-05-05
  • Java使用Fastjson進(jìn)行JSON數(shù)據(jù)操作教程詳解

    Java使用Fastjson進(jìn)行JSON數(shù)據(jù)操作教程詳解

    Fastjson?是一個(gè)?Java?庫,可以用來將?Java?對象轉(zhuǎn)換為它們的?JSON?表示,本文主要為大家詳細(xì)介紹了Java如何使用Fastjson進(jìn)行JSON數(shù)據(jù)操作,需要的可以參考下
    2023-12-12
  • Intellij IDEA 2017新特性之Spring Boot相關(guān)特征介紹

    Intellij IDEA 2017新特性之Spring Boot相關(guān)特征介紹

    Intellij IDEA 2017.2.2版本針對Springboot設(shè)置了一些特性,本篇文章給大家簡單介紹一下如何使用這些特性,需要的朋友參考下吧
    2018-01-01
  • Java基礎(chǔ)學(xué)習(xí)之標(biāo)簽

    Java基礎(chǔ)學(xué)習(xí)之標(biāo)簽

    在Java中,標(biāo)簽必須在循環(huán)之前使用, 一個(gè)循環(huán)之中嵌套另一個(gè)循環(huán)的開關(guān),從多重嵌套中continue或break,該文詳細(xì)介紹了標(biāo)簽的相關(guān)知識,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們還很有幫助,需要的朋友可以參考下
    2021-05-05
  • mybatis-plus3.4.0邏輯刪除報(bào)錯(cuò)的解決

    mybatis-plus3.4.0邏輯刪除報(bào)錯(cuò)的解決

    這篇文章主要介紹了mybatis-plus3.4.0邏輯刪除報(bào)錯(cuò)的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java 鍵盤輸入的多種實(shí)現(xiàn)方法

    java 鍵盤輸入的多種實(shí)現(xiàn)方法

    java不像C中擁有scanf這樣功能強(qiáng)大的函數(shù),大多是通過定義輸入輸出流對象。常用的類有BufferedReader,Scanner。
    2013-03-03
  • Java中常見字符串拼接九種方式詳細(xì)例子

    Java中常見字符串拼接九種方式詳細(xì)例子

    這篇文章主要給大家介紹了關(guān)于Java中常見字符串拼接的九種方式,字符串拼接是我們在Java代碼中比較經(jīng)常要做的事情,就是把多個(gè)字符串拼接到一起,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java利用序列化實(shí)現(xiàn)對象深度clone的方法

    Java利用序列化實(shí)現(xiàn)對象深度clone的方法

    這篇文章主要介紹了Java利用序列化實(shí)現(xiàn)對象深度clone的方法,實(shí)例分析了java序列化及對象克隆的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒

    基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒

    這篇文章主要介紹了基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評論