自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何計(jì)算Java對(duì)象占用了多少空間?

開(kāi)發(fā) 后端
在Java中沒(méi)有sizeof運(yùn)算符,所以沒(méi)辦法知道一個(gè)對(duì)象到底占用了多大的空間,但是在分配對(duì)象的時(shí)候會(huì)有一些基本的規(guī)則,我們根據(jù)這些規(guī)則大致能判斷出來(lái)對(duì)象大小。

在Java中沒(méi)有sizeof運(yùn)算符,所以沒(méi)辦法知道一個(gè)對(duì)象到底占用了多大的空間,但是在分配對(duì)象的時(shí)候會(huì)有一些基本的規(guī)則,我們根據(jù)這些規(guī)則大致能判斷出來(lái)對(duì)象大小。

[[161872]]

對(duì)象頭

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

  1. 對(duì)象的HashCode,鎖信息等

  2. 到對(duì)象類(lèi)型數(shù)據(jù)的指針

  3. 數(shù)組的長(zhǎng)度(如果是數(shù)組的話(huà))

規(guī)則

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

  1. public class Test { 
  2.     byte a; 
  3.     int b; 
  4.     boolean c; 
  5.     long d; 
  6.     Object e; 

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

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

  1. class A { 
  2.     long a; 
  3.     int b; 
  4.     int c; 
  5. class B extends A { 
  6.     long d; 

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

  1. class A { 
  2.     byte a; 
  3. class B extends A { 
  4.     byte b; 

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

  1. class A { 
  2.     byte a; 
  3. class B extends A { 
  4.     long b; 
  5.     short c; 
  6.     byte d; 

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

責(zé)任編輯:王雪燕 來(lái)源: WsztRush
相關(guān)推薦

2009-08-18 09:19:12

Windows 7占用空間Windows 7體積

2009-09-07 09:10:24

Windows 7占用空間

2010-06-28 15:48:51

SQL Server

2018-01-11 15:36:23

命令磁盤(pán)空間Docker

2015-09-30 14:38:19

系統(tǒng)磁盤(pán)空間Windows 10

2024-07-08 10:56:34

Rust進(jìn)程內(nèi)存

2025-02-10 00:20:00

2019-02-26 10:00:37

Linux命令內(nèi)存

2021-01-20 13:50:45

MySQL數(shù)據(jù)庫(kù)代碼

2015-11-25 13:37:52

磁盤(pán)空間LinuxUbuntu

2022-02-08 11:31:23

Linux端口命令

2022-01-13 09:58:26

Linux端口命令

2021-08-21 15:11:31

微信內(nèi)存功能

2011-04-13 09:31:50

Oracle

2013-11-06 15:01:51

Linux命令內(nèi)存

2019-02-25 08:00:00

Linux內(nèi)存

2021-02-27 10:49:13

可視化分析資源

2021-07-22 07:20:24

JS 遍歷方法前端

2022-04-01 10:37:45

戴爾

2010-07-12 09:15:54

SQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)