日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java boolean占用內(nèi)存大小說明

瀏覽:219日期:2022-08-11 11:21:00
答案:4B或1B詳細(xì)

1、如果boolean是單獨(dú)使用:boolean占4個(gè)字節(jié)。

2、如果boolean是以boolean數(shù)組形式使用:boolean占1個(gè)字節(jié)

解釋

1、JVM沒有提供boolean類型專用的字節(jié)指令,而是使用int相關(guān)指令來代替。

2、對(duì)boolean數(shù)組的訪問與修改,會(huì)共用byte數(shù)組的baload和bastore指令。

分析結(jié)論

上面的第一個(gè)結(jié)論是說:boolean在底層實(shí)際調(diào)用int,那么既然int占4個(gè)字節(jié),boolean頁(yè)自然占4個(gè)字節(jié)。即 boolean類型占4個(gè)字節(jié)。

上面的第2個(gè)結(jié)論是說:boolean數(shù)組在底層會(huì)用byte指令,那么既然byte占1個(gè)字節(jié),boolean數(shù)組中的boolean也就占1個(gè)字節(jié),即,boolean數(shù)組中的boolean占1個(gè)字節(jié)。

擴(kuò)展

1、因此,大多數(shù)對(duì)于boolean,byte,char和short類型數(shù)據(jù)的操作,實(shí)際都提升int,并使用int做為運(yùn)算類型,所以他們占4個(gè)字節(jié),實(shí)際上,虛擬機(jī)規(guī)范也只有4字節(jié)和8字節(jié)類型(long,float),boolean,char,short都是占了4字節(jié)。

2、對(duì)于在棧上(局部變量)的byte,char,short類型的數(shù)據(jù),在內(nèi)存中的確會(huì)占4字節(jié),但這對(duì)于(數(shù)組)對(duì)象來說并不適用。

java各種類型對(duì)象占用內(nèi)存情況分析

經(jīng)典篇,有圖有真相

為什么寫這篇文章?

其實(shí)一般的程序猿根本不用了解這么深,只有當(dāng)你到了一定層次,需要了解jvm內(nèi)部運(yùn)行機(jī)制,或者高并發(fā)多線程下,你寫的代碼對(duì)內(nèi)存有影響,你想做性能優(yōu)化。。。等等等等,一句話,當(dāng)你想深入了解java對(duì)象在內(nèi)存中,如何存儲(chǔ),或者每個(gè)對(duì)象占用多大空間時(shí),你會(huì)感謝這篇文章

本文主要分析jvm中的情況,實(shí)驗(yàn)環(huán)境為64位window10系統(tǒng)、JDK1.8,使用JProfiler進(jìn)行結(jié)論驗(yàn)證

很多描述以及 概念是基于你懂基本java知識(shí)的,如果你看起來有點(diǎn)吃力,要加油咯

基本數(shù)據(jù)類型占用類型 占用空間 boolean、byte 1byte short、char 2byte int、float 4byte long、double 8byte

接下來用JProfiler驗(yàn)證:

新建一個(gè)空對(duì)象,觀察空對(duì)象內(nèi)存占用

public class TestObject {}

對(duì)象占用內(nèi)存 16b,如圖

java boolean占用內(nèi)存大小說明

結(jié)論:一般自建空對(duì)象占用內(nèi)存 16b,16 = 12 + 4

在TestObj中新增一個(gè) int 屬性,觀察對(duì)象內(nèi)存占用

public class TestObj { private int i;}

對(duì)象占用內(nèi)存 16b,如圖

java boolean占用內(nèi)存大小說明

結(jié)論:int 占用 4b, 4 = 16 -12

在TestObj中新增一個(gè) long 屬性,觀察對(duì)象內(nèi)存占用

public class TestObj { private long i;}

對(duì)象占用內(nèi)存 24b,如圖

java boolean占用內(nèi)存大小說明

結(jié)論:long 占用 8b, 8 = 24 -12 - 4

其余基本類型可以參照以上自行驗(yàn)證,原理一樣

包裝類型占用

包裝類(Boolean/Byte/Short/Character/Integer/Long/Double/Float)占用內(nèi)存的大小等于對(duì)象頭大小加上底層基礎(chǔ)數(shù)據(jù)類型的大小。

類型占用空間Boolean、Byte16byteShort、Char16byteInteger、Float16byteLong、Double24byte 在TestObj中新增一個(gè) Integer 屬性,觀察對(duì)象內(nèi)存占用

類型 占用空間 Boolean、Byte 16byte Short、Char 16byte Integer、Float 16byte Long、Double 24byte

public class TestObj { private Integer i =128;}

對(duì)象占用內(nèi)存 32b,如圖

java boolean占用內(nèi)存大小說明

結(jié)論:Integer 占用 16b, 16 = 32 - 16

特別的:-128~127 之間的封裝類型,只占用 4b**

在TestObj中新增一個(gè) Long 屬性,觀察對(duì)象內(nèi)存占用

public class TestObj { private Long l = new Long(1);}

對(duì)象占用內(nèi)存 40b,如圖

java boolean占用內(nèi)存大小說明

結(jié)論:Long 占用 24b, 16 = 40 - 16

其余包裝類型可以參照以上自行驗(yàn)證,原理一樣

基本類型數(shù)組占用

64位機(jī)器上,數(shù)組對(duì)象的對(duì)象頭占用24 bytes,啟用壓縮后占用16字節(jié)。比普通對(duì)象占用內(nèi)存多是因?yàn)樾枰~外的空間存儲(chǔ)數(shù)組的長(zhǎng)度(普通16b-12b)。

對(duì)象數(shù)組本身的大小=數(shù)組對(duì)象頭 + length * 存放單個(gè)元素大小

在TestObj中新增一個(gè) char[] 屬性,觀察對(duì)象內(nèi)存占用

public class TestObj { private char[] c = {’a’,’b’,’c’};}

對(duì)象占用內(nèi)存 40b,如圖

java boolean占用內(nèi)存大小說明

結(jié)論:char[3] 占用 24b, 24 = 40 - 16,24 = 16 + 3 * 2 + 2

封裝類型數(shù)組占用

封裝類型數(shù)組比基本類型的數(shù)組,需要多管理元素的引用

對(duì)象數(shù)組本身的大小=數(shù)組對(duì)象頭+length 引用指針大小 + length 存放單個(gè)元素大小

在TestObj中新增一個(gè) Integer[] 屬性,觀察對(duì)象內(nèi)存占用

public class TestObj { private Integer[] i = {128,129,130};}

對(duì)象占用內(nèi)存 80b,如圖

java boolean占用內(nèi)存大小說明

結(jié)論:Integer[3] 占用 80b, 80 = 96 - 16 , 80 = 16 + 3 4 + 3 16 +4

String占用內(nèi)存 在TestObj中新增一個(gè)空 String 屬性,觀察對(duì)象內(nèi)存占用

public class TestObj { private String s = new String('');}

對(duì)象占用內(nèi)存 40b,如圖

java boolean占用內(nèi)存大小說明

結(jié)論:String 本身占用 24b, 24 = 40 -16,另外,String的屬性value還需要 16b,也就是說空””也需要16b

注意:這里為什么要寫String s = new String(“”)?請(qǐng)自己思考,不寫會(huì)怎么樣?

答:如果寫成String s = “”,是不會(huì)再堆中開辟內(nèi)存的,也就看不到String占用的空間,你看到的將會(huì)是下面的,至于為什么,都是因?yàn)閒inal

java boolean占用內(nèi)存大小說明

ArrayList, HashMap的內(nèi)存占用

這些參考文章開頭提到的那篇文章,下面給出計(jì)算公式:

一個(gè)ArrayList實(shí)例本身的的大小為

12(header) + 4(modCount) + 4(size) + 4(elementData reference) = 24 (bytes)

下面分析一個(gè)只有一個(gè)Integer(1)元素的ArrayList實(shí)例占用的內(nèi)存大小。

ArrayList<Integer> testList = Lists.newArrayList();testList.add(1);

根據(jù)上面對(duì)ArrayList原理的介紹,當(dāng)調(diào)用add方法時(shí),ArrayList會(huì)初始化一個(gè)默認(rèn)大小為10的數(shù)組,而數(shù)組中

保存的Integer(1)實(shí)例大小為16 bytes。

則testList占用的內(nèi)存大小為:

24(ArrayList itselft) + 16(elementData array header) + 10 * 4(elemetData reference) + 16(Integer) = 96 (bytes)

JProfiler中的結(jié)果驗(yàn)證了上述分析:

java boolean占用內(nèi)存大小說明

2. HashMap內(nèi)存占用

這里分析一個(gè)只有一組鍵值對(duì)的HashMap, 結(jié)構(gòu)如下:

Map<Integer, Integer> testMap = Maps.newHashMap();testMap.put(1, 2);

首先分析HashMap本身的大小。HashMap對(duì)象擁有的屬性包括:

/** * The table, initialized on first use, and resized as * necessary. When allocated, length is always a power of two. * (We also tolerate length zero in some operations to allow * bootstrapping mechanics that are currently not needed.) */ transient Node<K,V>[] table; /** * Holds cached entrySet(). Note that AbstractMap fields are used * for keySet() and values(). */ transient Set<Map.Entry<K,V>> entrySet; /** * The number of key-value mappings contained in this map. */ transient int size; /** * The number of times this HashMap has been structurally modified * Structural modifications are those that change the number of mappings in * the HashMap or otherwise modify its internal structure (e.g., * rehash). This field is used to make iterators on Collection-views of * the HashMap fail-fast. (See ConcurrentModificationException). */ transient int modCount; /** * The next size value at which to resize (capacity * load factor). * * @serial */ // (The javadoc description is true upon serialization. // Additionally, if the table array has not been allocated, this // field holds the initial array capacity, or zero signifying // DEFAULT_INITIAL_CAPACITY.) int threshold; /** * The load factor for the hash table. * * @serial */ final float loadFactor;

HashMap繼承了AbstractMap<K,V>, AbstractMap有兩個(gè)屬性:

transient Set<K>keySet; transient Collection<V> values;

所以一個(gè)HashMap對(duì)象本身的大小為:

12(header) + 4(table reference) + 4(entrySet reference) + 4(size) + 4(modCount) + 4(threshold) + 8(loadFactor) + 4(keySet reference) + 4(values reference) = 48(bytes)

接著分析testMap實(shí)例在總共占用的內(nèi)存大小。

根據(jù)上面對(duì)HashMap原理的介紹,可知每對(duì)鍵值對(duì)對(duì)應(yīng)一個(gè)Node對(duì)象。根據(jù)上面的Node的數(shù)據(jù)結(jié)構(gòu),一個(gè)Node對(duì)象的大小為:

12(header) + 4(hash reference) + 4(key reference) + 4(value reference)+ 4(next pointer reference) = 28 (padding) -> 32(bytes)

加上Key和Value兩個(gè)Integer對(duì)象,一個(gè)Node占用內(nèi)存總大小為:32 + 2 * 16 = 64(bytes)

JProfiler中結(jié)果:

java boolean占用內(nèi)存大小說明

下面分析HashMap的Node數(shù)組的大小。

根據(jù)上面HashMap的原理可知,在不指定容量大小的情況下,HashMap初始容量為16,所以testMap的Node[]占用的內(nèi)存大小為:

16(header) + 16 * 4(Node reference) + 64(Node) = 144(bytes)

JProfile結(jié)果:

java boolean占用內(nèi)存大小說明

所以,testMap占用的內(nèi)存總大小為:

48(map itself) + 144(Node[]) = 192(bytes)

JProfile結(jié)果:

java boolean占用內(nèi)存大小說明

這里只用一個(gè)例子說明如何對(duì)HashMap進(jìn)行占用內(nèi)存大小的計(jì)算,根據(jù)HashMap初始化容量的大小,以及擴(kuò)容的影響,HashMap占用內(nèi)存大小要進(jìn)行具體分析,不過思路都是一致的。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品2023| 麻豆久久久久久| 日韩在线短视频| 日韩亚洲一区在线| 久久久精品久久久久久96| 在线国产一区| 天堂va蜜桃一区二区三区| 日韩福利视频一区| 欧美极品中文字幕| 久久av偷拍| 中文另类视频| 乱人伦精品视频在线观看| 日韩欧美激情电影| 麻豆91精品视频| 欧美aa国产视频| 亚洲精品护士| 久久精品资源| 九一精品国产| 欧美视频一区| 欧美日韩在线观看首页| 欧美网站在线| 欧美日韩精品一区二区三区在线观看| 老鸭窝一区二区久久精品| 久久精品播放| 蜜桃一区二区三区在线| 国产毛片精品久久| 日韩天堂在线| 日本久久一区| 亚洲黄色免费av| 最新国产精品| 91偷拍一区二区三区精品| 亚洲一区观看| 精品一区二区男人吃奶| 久久av在线| 久久精品一区二区国产| 午夜精品网站| 麻豆视频一区| 夜夜精品视频| 久久精品国产免费| 亚洲高清成人| 国产精品亚洲欧美一级在线| 欧美va天堂在线| 日韩高清不卡一区| 欧美 日韩 国产精品免费观看| 日本不卡一区二区三区| 欧美91视频| 精品视频黄色| 亚洲乱码一区| 激情综合在线| 麻豆视频一区二区| 亚洲日产国产精品| 香蕉久久精品| 精品国产成人| 欧美精品国产| 99国产精品久久久久久久| 精品一区二区三区中文字幕视频| 亚洲乱码久久| 欧美1区免费| 日韩免费视频| 久久婷婷国产| 国产美女亚洲精品7777| 玖玖玖国产精品| 美女在线视频一区| 亚洲精品一区二区妖精| 在线手机中文字幕| 久久不卡日韩美女| 欧美日韩一区二区高清| 亚洲欧美激情诱惑| 亚洲电影在线一区二区三区| 国产成人精品一区二区三区在线| 日本久久一区| 蜜桃一区二区三区在线| 成人av动漫在线观看| sm捆绑调教国产免费网站在线观看| 欧美日韩亚洲一区| 日欧美一区二区| 亚洲一区欧美激情| 国产一在线精品一区在线观看| 国产一区二区三区四区| 国产精品对白| 麻豆一区二区99久久久久| 国产精品啊啊啊| 国产精品va| 久久av影院| 国产欧美日韩| 国产欧美一区二区三区精品观看| 一本一道久久a久久| 亚洲欧美激情诱惑| 日韩视频在线一区二区三区 | 国产一区二区三区不卡av| 日韩午夜视频在线| 日韩国产一二三区| 欧美中文高清| 国产日韩一区| 精品一区二区三区在线观看视频 | 国产精品调教| 国产精品巨作av| 精品一区视频| 国产精品久久久久久久久妇女| 久久精品天堂| 欧美亚洲日本精品| 日韩国产综合| 亚洲一级黄色| 国产高清一区| 久久夜色精品| 91亚洲无吗| 欧美91在线| 97精品国产一区二区三区| 在线一区视频观看| 亚洲免费高清| 亚洲精品影视| 国产精品nxnn| 成人台湾亚洲精品一区二区| 亚洲电影有码| 91久久久久| 日韩在线成人| 精品一区二区三区中文字幕视频| 91一区二区| 欧美日韩一二三四| 日韩精品一级二级 | 婷婷激情图片久久| 亚洲一区有码| 久久99性xxx老妇胖精品| 视频在线不卡免费观看| 亚洲一级二级| 97成人在线| 黑人精品一区| 亚洲欧美日本日韩| 国产精品视频首页| 久久国产中文字幕| 一区二区精品| 精品国产乱码久久久| 国产一区清纯| 欧美日韩一区二区三区四区在线观看| 成人在线视频免费| 在线 亚洲欧美在线综合一区| 日本成人精品| 久久久国产精品一区二区中文| 亚洲精选91| 狠狠久久伊人中文字幕| 午夜欧美理论片| 国产亚洲第一伦理第一区| 日韩中文字幕高清在线观看| 丝瓜av网站精品一区二区| 国产伦理久久久久久妇女| 日韩国产在线| 四虎精品永久免费| 日韩欧美一区二区三区免费看| 久久国产精品毛片| 美女视频免费精品| 久久xxxx| 国产精品麻豆久久| 三级久久三级久久久| av在线日韩| 国产精品一区2区3区| 好看的亚洲午夜视频在线| 久久99久久久精品欧美| 欧美专区在线| 激情黄产视频在线免费观看| 婷婷五月色综合香五月| 久久伦理在线| 久久这里只有| 青草av.久久免费一区| 美女久久久久| 国产一区二区三区日韩精品| 婷婷精品在线| 亚洲欧洲午夜| 天堂√中文最新版在线| 欧美综合社区国产| 国产精品普通话对白| 日韩毛片在线| 精品视频国产| 欧美日韩亚洲一区三区| 久久99伊人| 激情丁香综合| 国产成年精品| 国产伦乱精品| 日韩精品免费观看视频| 亚洲黄页一区| 久久视频精品| 日韩成人综合| 国产精品成人一区二区不卡| 日韩精品亚洲专区在线观看| 国产亚洲永久域名| 久久国产影院| 久久久精品网| 国产一区二区三区久久久久久久久| 日本三级亚洲精品| 亚洲精品亚洲人成在线观看| 亚洲欧美视频| 一区在线视频观看| 欧美成人基地 | 久久福利精品| 亚洲激情黄色| 欧美精品自拍| 国产韩日影视精品| 久久精品成人| 欧美日韩国产观看视频| 成人在线免费观看91| 精品日韩一区|