| 類型 | 位元 | 位元組 |
|---|---|---|
| byte | 8 | 1 |
| short/char | 16 | 2 |
| int/float | 32 | 4 |
| long/double | 64 | 8 |
| boolean | ~1 (JVM 實作相關) | ~1 |
char a = '漢'; 佔 2 位元組(UTF-16 代碼單元),但補字符可能佔 4 位元組(兩個 char)。
Java 無 sizeof 運算子。可用以下方式估算:
-javaagent):public class ObjectSizeAgent {
public static Instrumentation inst;
public static void premain(String args, Instrumentation inst) { ObjectSizeAgent.inst = inst; }
public static long sizeOf(Object o) { return inst.getObjectSize(o); }
}
System.out.println(ClassLayout.parseInstance(new Object()).toPrintable());
Runtime rt = Runtime.getRuntime();
long before = rt.totalMemory() - rt.freeMemory();
Object obj = new MyObject();
long after = rt.totalMemory() - rt.freeMemory();
System.out.println("約 " + (after - before) + " bytes");
String 內部為 char[](Java 9+ 為 byte[] + coder),大小 = 物件頭 + 陣列引用 + 陣列物件頭 + 字元資料。對於精確分析,建議使用 JOL 或 jcmd 配合 MAT 分析堆轉儲檔。