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

您的位置:首頁技術文章
文章詳情頁

java boolean占用內存大小說明

瀏覽:225日期:2022-08-11 11:21:00
答案:4B或1B詳細

1、如果boolean是單獨使用:boolean占4個字節。

2、如果boolean是以boolean數組形式使用:boolean占1個字節

解釋

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

2、對boolean數組的訪問與修改,會共用byte數組的baload和bastore指令。

分析結論

上面的第一個結論是說:boolean在底層實際調用int,那么既然int占4個字節,boolean頁自然占4個字節。即 boolean類型占4個字節。

上面的第2個結論是說:boolean數組在底層會用byte指令,那么既然byte占1個字節,boolean數組中的boolean也就占1個字節,即,boolean數組中的boolean占1個字節。

擴展

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

2、對于在棧上(局部變量)的byte,char,short類型的數據,在內存中的確會占4字節,但這對于(數組)對象來說并不適用。

java各種類型對象占用內存情況分析

經典篇,有圖有真相

為什么寫這篇文章?

其實一般的程序猿根本不用了解這么深,只有當你到了一定層次,需要了解jvm內部運行機制,或者高并發多線程下,你寫的代碼對內存有影響,你想做性能優化。。。等等等等,一句話,當你想深入了解java對象在內存中,如何存儲,或者每個對象占用多大空間時,你會感謝這篇文章

本文主要分析jvm中的情況,實驗環境為64位window10系統、JDK1.8,使用JProfiler進行結論驗證

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

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

接下來用JProfiler驗證:

新建一個空對象,觀察空對象內存占用

public class TestObject {}

對象占用內存 16b,如圖

java boolean占用內存大小說明

結論:一般自建空對象占用內存 16b,16 = 12 + 4

在TestObj中新增一個 int 屬性,觀察對象內存占用

public class TestObj { private int i;}

對象占用內存 16b,如圖

java boolean占用內存大小說明

結論:int 占用 4b, 4 = 16 -12

在TestObj中新增一個 long 屬性,觀察對象內存占用

public class TestObj { private long i;}

對象占用內存 24b,如圖

java boolean占用內存大小說明

結論:long 占用 8b, 8 = 24 -12 - 4

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

包裝類型占用

包裝類(Boolean/Byte/Short/Character/Integer/Long/Double/Float)占用內存的大小等于對象頭大小加上底層基礎數據類型的大小。

類型占用空間Boolean、Byte16byteShort、Char16byteInteger、Float16byteLong、Double24byte 在TestObj中新增一個 Integer 屬性,觀察對象內存占用

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

public class TestObj { private Integer i =128;}

對象占用內存 32b,如圖

java boolean占用內存大小說明

結論:Integer 占用 16b, 16 = 32 - 16

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

在TestObj中新增一個 Long 屬性,觀察對象內存占用

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

對象占用內存 40b,如圖

java boolean占用內存大小說明

結論:Long 占用 24b, 16 = 40 - 16

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

基本類型數組占用

64位機器上,數組對象的對象頭占用24 bytes,啟用壓縮后占用16字節。比普通對象占用內存多是因為需要額外的空間存儲數組的長度(普通16b-12b)。

對象數組本身的大小=數組對象頭 + length * 存放單個元素大小

在TestObj中新增一個 char[] 屬性,觀察對象內存占用

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

對象占用內存 40b,如圖

java boolean占用內存大小說明

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

封裝類型數組占用

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

對象數組本身的大小=數組對象頭+length 引用指針大小 + length 存放單個元素大小

在TestObj中新增一個 Integer[] 屬性,觀察對象內存占用

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

對象占用內存 80b,如圖

java boolean占用內存大小說明

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

String占用內存 在TestObj中新增一個空 String 屬性,觀察對象內存占用

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

對象占用內存 40b,如圖

java boolean占用內存大小說明

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

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

答:如果寫成String s = “”,是不會再堆中開辟內存的,也就看不到String占用的空間,你看到的將會是下面的,至于為什么,都是因為final

java boolean占用內存大小說明

ArrayList, HashMap的內存占用

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

一個ArrayList實例本身的的大小為

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

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

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

根據上面對ArrayList原理的介紹,當調用add方法時,ArrayList會初始化一個默認大小為10的數組,而數組中

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

則testList占用的內存大小為:

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

JProfiler中的結果驗證了上述分析:

java boolean占用內存大小說明

2. HashMap內存占用

這里分析一個只有一組鍵值對的HashMap, 結構如下:

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

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

/** * 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有兩個屬性:

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

所以一個HashMap對象本身的大小為:

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實例在總共占用的內存大小。

根據上面對HashMap原理的介紹,可知每對鍵值對對應一個Node對象。根據上面的Node的數據結構,一個Node對象的大小為:

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

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

JProfiler中結果:

java boolean占用內存大小說明

下面分析HashMap的Node數組的大小。

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

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

JProfile結果:

java boolean占用內存大小說明

所以,testMap占用的內存總大小為:

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

JProfile結果:

java boolean占用內存大小說明

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99国产精品视频免费观看一公开| 欧美freesex黑人又粗又大| 免费国产自久久久久三四区久久| 91精品亚洲| 免费中文字幕日韩欧美| 亚洲欧美网站在线观看| 蜜桃视频一区二区三区| 欧美日韩在线精品一区二区三区激情综合 | 国产精品日韩精品在线播放| 美女精品一区二区| 欧美日一区二区| 亚洲欧美久久精品| 精品国产乱码久久久久久1区2匹| 久久精品免费一区二区三区 | 日本va欧美va瓶| 在线天堂资源www在线污| 伊人影院久久| 国产毛片精品| 久久视频一区| 青青草伊人久久| 不卡福利视频| 中文字幕免费一区二区| 国语精品一区| 亚洲欧美日韩综合国产aⅴ| 国产欧美啪啪| 91精品综合| 国产精品综合| 欧洲毛片在线视频免费观看| 免费观看久久久4p| 高清av一区| 天堂va在线高清一区| 黄色网一区二区| 一本综合精品| 青青久久av| 日韩在线黄色| 啪啪国产精品| 热久久久久久| 一区免费在线| 国产一区二区三区天码| 亚洲一二av| av在线日韩| 国产精品久久| 久久尤物视频| 蜜臀久久久久久久| 欧美国产日韩电影| 中文字幕中文字幕精品| 国产精品国产一区| 日本成人在线不卡视频| 免费精品国产的网站免费观看| 国产激情久久| 亚洲aa在线| 蜜桃tv一区二区三区| 久久中文精品| 91亚洲精品在看在线观看高清| 亚洲精品一二三区区别| 成人国产精品一区二区免费麻豆| 日韩精品一区二区三区中文 | 亚洲人妖在线| 欧美a级片一区| 亚洲国产福利| 激情不卡一区二区三区视频在线| 日本不卡中文字幕| 日韩精品一二区| 亚洲欧美伊人| 99视频精品全国免费| 国产a久久精品一区二区三区| 视频精品一区二区| 精品91福利视频| 免费一级欧美片在线观看网站 | 日本一不卡视频| 国产不卡av一区二区| 成人免费一区| 美国欧美日韩国产在线播放| 国产精品一区二区精品| 综合激情一区| 国产视频久久| 99在线精品免费视频九九视 | 亚洲精品少妇| 日韩精品第一| 日韩一二三区在线观看| 亚洲2区在线| 日韩精品视频在线看| 亚洲综合专区| 日本久久二区| 日韩高清中文字幕一区| 日韩动漫一区| 国产亚洲欧美日韩精品一区二区三区 | 日本强好片久久久久久aaa| 久久av在线| 午夜一区在线| 六月婷婷一区| 免费在线观看日韩欧美| 另类av一区二区| 亚洲另类黄色| 亚洲精品欧美| 欧美日韩午夜电影网| 日韩三级视频| 欧美有码在线| 久久激情五月激情| 国产精品一站二站| 麻豆一区二区三区| 成人台湾亚洲精品一区二区| 97在线精品| 欧美不卡高清| 丝袜美腿亚洲色图| 亚洲精品激情| 国产精品美女久久久久久不卡| 国产精品mm| аⅴ资源天堂资源库在线| 一区在线免费| 亚洲免费一区三区| 欧美成人基地| 日韩精品久久理论片| 亚洲综合中文| 欧美视频二区| 国产精品99一区二区三区| 日韩精品诱惑一区?区三区| 亚洲福利精品| 亚洲乱亚洲高清| 精品资源在线| 日韩成人亚洲| 国产丝袜一区| 91亚洲人成网污www| 激情欧美一区二区三区| 一区二区91| 麻豆精品在线观看| 久久人人精品| 亚洲人成网77777色在线播放| 国产精品亚洲四区在线观看| 黄色在线网站噜噜噜| 99在线精品免费视频九九视| 日韩精品中文字幕一区二区| 久久香蕉网站| 伊人久久亚洲热| 日本少妇精品亚洲第一区| 精品国产99| 亚洲欧美一区在线| 国产日韩一区| 成人在线免费观看网站| 日韩中文字幕| 日本成人在线网站| 免费视频一区三区| 亚洲精品乱码久久久久久蜜桃麻豆 | 麻豆精品网站| 美女毛片一区二区三区四区最新中文字幕亚洲 | 免费人成网站在线观看欧美高清| 国产日韩欧美一区| 久久精品一区二区不卡| 蜜臀精品一区二区三区在线观看| 精品视频亚洲| 蜜臀国产一区二区三区在线播放| 粉嫩av一区二区三区四区五区 | 日韩精品免费视频一区二区三区| 亚洲国产成人二区| 亚洲综合色婷婷在线观看| 国产在线日韩精品| 日韩中文字幕区一区有砖一区| 国产精品麻豆成人av电影艾秋 | 美美哒免费高清在线观看视频一区二区| 国产欧美自拍一区| 欧美女激情福利| 精品一区二区三区四区五区| 久久大逼视频| 亚洲欧洲高清| 国产伦理久久久久久妇女| 欧美不卡视频| 国产suv精品一区二区四区视频| 热久久久久久久| 啪啪国产精品| 国产欧美日韩一区二区三区四区 | 国产精品成人一区二区不卡| 亚洲一区二区三区无吗| 国产999精品在线观看| 午夜久久av | 久久久久蜜桃| 国产精品视频一区二区三区| 尹人成人综合网| 国产一区二区三区黄网站| 久久成人国产| 欧美一区二区性| 91视频一区| 国产情侣久久| 亚洲精品精选| 不卡av一区二区| 亚洲黄色网址| 精品一区二区三区中文字幕| 日韩在线成人| 91久久视频| 日本久久黄色| 国产伦精品一区二区三区视频| 99精品视频在线| 国产美女撒尿一区二区| 亚洲一区亚洲| 久久精品导航| 国产精品黑丝在线播放| 国产欧美一区二区三区米奇| 一级欧美视频| 水蜜桃久久夜色精品一区的特点| 99精品美女| 色爱av综合网|