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

如何計算Java對象占用了多少空間?

 更新時間:2016年01月10日 17:03:51   投稿:lijiao  
在Java中沒有sizeof運算符,所以沒辦法知道一個對象到底占用了多大的空間,但是在分配對象的時候會有一些基本的規(guī)則,我們根據(jù)這些規(guī)則大致能判斷出來對象大小,需要的朋友可以參考下

本文介紹了計算Java對象占用了多少空間的方法,分享給大家供大家參考,具體內(nèi)容如下

一、對象頭

對象的頭部至少有兩個WORD,如果是數(shù)組的話,那么三個WORD,內(nèi)容如下:

  • 1、對象的HashCode,鎖信息等
  • 2、到對象類型數(shù)據(jù)的指針
  • 3、數(shù)組的長度(如果是數(shù)組的話)

二、規(guī)則

首先,任何對象都是8字節(jié)對齊,屬性按照[long,double]、[int,float]、[char,short]、[byte,boolean]、reference的順序存放,舉個例子:

public class Test {
  byte a;
  int b;
  boolean c;
  long d;
  Object e;
}

如果這個對象的屬性按照順序存放的話,要占用的空間為:head(8) + a(1) + padding(3) + b(4) + c(1) + padding(7) + d(8) + e(4) + padding(4) = 40。但是按照這個規(guī)則得到:head(8) + d(8) + b(4) + a(1) + c(1) + padding(2) + e(4) + padding(4) = 32??梢钥吹焦?jié)省了不少空間。

在涉及繼承關系的時候有一個最基本的規(guī)則:首先存放父類中的成員,接著才是子類中的成員,舉個例子:

class A {
  long a;
  int b;
  int c;
}
class B extends A {
  long d;
}

這樣存放的順序及占用空間如下:head(8) + a(8) + b(4) + c(4) + d(8) = 32。那如果父類中的屬性不夠八個字節(jié)怎么辦?這樣就有了新的一條規(guī)則:父類中最后一個成員與子類的第一個成員的間隔如果不夠4個字節(jié),此時需要擴展到4個字節(jié)的基本單位,舉個例子:

class A {
  byte a;
}
class B extends A {
  byte b;
}

那么此時占用的空間如下:head(8) + a(1) + padding(3) + b(1) + padding(3) = 16。顯然這種方式比較浪費空間,那么就有了:如果子類的第一個成員是double或者long,并且父類并沒有用完8個字節(jié),JVM會破壞規(guī)將較小的數(shù)據(jù)填充到該空間,舉個例子:

class A {
  byte a;
}
class B extends A {
  long b;
  short c;
  byte d;
}

此時占用的空間如下:head(8) + a(1) + padding(3) + c(2) + d(1) + padding(1) + b(8) = 24。

以上就是計算Java對象占用了多少空間的方法,希望對大家學習java程序設計有所幫助。

相關文章

  • Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理方法

    Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理方法

    這篇文章主要介紹了Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • Java如何基于ProcessBuilder類調(diào)用外部程序

    Java如何基于ProcessBuilder類調(diào)用外部程序

    這篇文章主要介紹了Java如何基于ProcessBuilder類調(diào)用外部程序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 一篇文章大家徹底學會Java之格式化輸出

    一篇文章大家徹底學會Java之格式化輸出

    Java提供了多種格式化輸出的方式,包括String.format()、System.out.printf()和Formatter類,這些方法支持數(shù)字、日期、字符串等多種格式化操作,這篇文章主要介紹了Java格式化輸出的相關資料,需要的朋友可以參考下
    2025-04-04
  • 詳解Java變量與常量

    詳解Java變量與常量

    這篇文章主要介紹了Java變量與常量,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Java實現(xiàn)RSA算法的方法詳解

    Java實現(xiàn)RSA算法的方法詳解

    這篇文章主要介紹了Java實現(xiàn)RSA算法的方法,結(jié)合實例形式分析了RSA算法的原理、實現(xiàn)與使用方法,需要的朋友可以參考下
    2018-03-03
  • Java中Thread和Runnable創(chuàng)建線程的方式對比

    Java中Thread和Runnable創(chuàng)建線程的方式對比

    本文主要介紹了Java中Thread和Runnable創(chuàng)建線程的方式對比,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • MyBatis快速入門

    MyBatis快速入門

    MyBatis是支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設置以及結(jié)果集的檢索。想要學好它,那就要從MyBatis基礎知識學起,下面跟著小編一起來看下吧
    2017-03-03
  • Java并發(fā)編程中的阻塞隊列解析

    Java并發(fā)編程中的阻塞隊列解析

    這篇文章主要介紹了Java并發(fā)編程中的阻塞隊列解析,阻塞隊列BlockingQueue是一個支持兩個附加操作的隊列,這兩個附加的操作是在隊列為空時,獲取元素的線程會等待隊列變?yōu)榉强?當隊列滿時,存儲元素的線程會等待隊列可用,需要的朋友可以參考下
    2023-08-08
  • 詳解Spring Aop實例之xml配置

    詳解Spring Aop實例之xml配置

    本篇文章主要介紹了詳解Spring Aop實例之xml配置,使用xml可以對aop進行集中配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • spring?boot如何通過自定義注解和AOP攔截指定的請求

    spring?boot如何通過自定義注解和AOP攔截指定的請求

    這篇文章主要介紹了spring?boot通過自定義注解和AOP攔截指定的請求,本文主要通過切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細的說明),需要的朋友可以參考下
    2024-06-06

最新評論

西藏| 邢台市| 潜山县| 黄平县| 霍城县| 成都市| 古浪县| 宜兰县| 绵竹市| 康平县| 湖南省| 广丰县| 辽阳市| 会东县| 沁水县| 常宁市| 苗栗县| 揭阳市| 治多县| 襄汾县| 合肥市| 兖州市| 凤山市| 和顺县| 井冈山市| 澜沧| 永清县| 苗栗市| 奉贤区| 东阳市| 北安市| 三门县| 台湾省| 岫岩| 岐山县| 英德市| 长葛市| 凤凰县| 从化市| 颍上县| 锡林浩特市|