一、 基本的數據類型所佔的內存大小
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));