Java中如何測試一個對象所佔的內存大小

一、 基本的數據類型所佔的內存大小

1.基本的數據類型所佔的內存大小:

類型 名稱 存儲需求/字節 bit數 範圍
整型 byte 1 8 -128~127 最大存儲數據量 255
整型 short 2 16 -32768~32767 最大存儲數據量 65535
整型 int 4 32 負的2的31次方~2的31次方-1  最大存儲數據量 2的31次方-1
整型 long 8 64 負的2的64次方~2的64次方-1  最大存儲數據量 2的64次方-1
浮點型 float 4 32  
浮點型 double 8 64  
char型 char 2 16  
boolean型 boolean 1 8 false/true

二、 一個對象所佔內存大小

1. 一個String需要多少內存?

  可以從兩個方面來說:

  (1)中文字符和英文字符所佔的內存不一樣,一個英文字符,就是一個字母,佔同內存爲1字節,而一個漢字,一般佔中2個字節。

   (2)使用不用的字符集,所佔的內存也會有所差異,比如,使用GB-2312或GBK,一個漢字佔用2個字節,而使用UTF-8,有一些比較複雜的漢字,可能會佔用3至4個字節。

     所以,例如:我愛你China,正確的回答應該是最少佔用的內存爲11個字節。

2. 一個對象所佔的內存大小有何影響

    一般的,我們不會太關注一個對象所佔的內存大小。但在滿足業務場景的前提下,肯定是以節省內存的原則,儘儘量的去節約內存。因爲內存都比較珍貴,即使降價了,既然一個小一點內存可以做到的,爲什麼要佔用大量內存呢,對吧。

     同時,在緩存用的比較普遍的情況下,測算一個對象所佔的內存大小,可以預估緩存的用量,用什麼樣的緩存會比較合理,比如一個內存中的緩存就可以搞定的事情,就沒必要去使用Redis或者Ehcache了。

    並且,如果使用緩存,必須對緩存中所存的數據所佔的內存做一個有效的把控,才能使緩存穩定高效。

三、 如何測試一個對象所佔的內存大小

1. 像String類型的,可以直接使用如下方法:

String str = "我愛你China";
System.out.print(str.getBytes("UTF-8").length());

  2. 採用Java SizeOf jar包,下載後,直接使用:

User user = new User();
System.out.println(RamUsageEstimator.sizeOf(user));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章