先上代码
public class Boolean占用的字节数 {
public static void main(String[] args) {
print();
boolean[] i = new boolean[10000];
print();
}
private static void print() {
long max = Runtime.getRuntime().maxMemory();
long total = Runtime.getRuntime().totalMemory();
long free = Runtime.getRuntime().freeMemory();
System.out.println(max + " " + total + " " + free + "使用:" + (total - free));
System.out.println("----------------------------------------------");
}
}
运行结果:
1572864 1572864 793744使用:779120
----------------------------------------------
1572864 1572864 783728使用:789136
----------------------------------------------
解析:
Runtime.getRuntime().maxMemory()
Java虚拟机将尝试使用的最大内存量。 如果没有固有的限制,则返回值Long.MAX_VALUE 。 JVM最大可从系统获取到的内存。
Runtime.getRuntime().totalMemory()
Java虚拟机中的内存总量。 此方法返回的值可能随时间而变化,具体取决于主机环境。 当前JVM从系统获取到的内存。
Runtime.getRuntime().freeMemory()
Java虚拟机中的可用内存量。 调用gc方法可能会导致增加返回的值freeMemory。JVM当前从系统获取到的内存中,空闲的那一部分内存。
已使用内存=totalMemory-freeMemory
结论:
boolean[10000]占用的内存约等于(789136-779120)=10016,所以1个boolean占用内存为1字节。若将boolean换成int,则可计算出int占用4个字节。