在C语言中sizeof是一个判断数據类型长度符的关键字,它可以返回一个对象或者类型所占的内存字节数
例如,在C语言中我们可以通过
可以输出int所占字节数。
Java是一种纯面向对象的编程语言它将内存管理的细节都交给Java Virtual Machine(JVM)进行。
同时Java是一种跨平台的语言可移植性好,它在数据类型在机器中的大小都相同
而在C/C++中需要sizeof是因为移植,不同的数据类型在不同的机器上大小可能不同程序员必须知道对应的数据类型大小。
这是一个程序java中没有现成的sizeof的实现,原因主要是java中的基本数据类型的大小都是固定的所以看上去没有必要用sizeof这个关键字。
思路:利用java中GC内存回收前后的heap size差别得出每个object的大小
实现的想法是这样的:java.lang.Runtime类中有一些简单的能涉及到内存管理的函数:
这个例子写的很恏,正好说明了java中基本类型封装对象所占内存的大小.
2.使用Integer对象占用了16个字节,而int占用4个字节,说了封装了之后内存消耗大了4倍
3.那么Long看起来比Integer对象應该使用更多空间,结果Long所占的空间也是16个字节.
那么就正好说明了JVM的对于基本类型封装对象的内存分配的规则是如下:
JVM强制使用8个字节作为边堺.
所以所有基本类型封装对象所占内存的大小都是16字节.
但是还是有区别,比如:
Integer对象虽然占用了16个字节的内存,但是只是利用了 Object所占内存(8个字节)+int所占内存(4个字节) = 12字节.
还有4个字节根本没有被使用.呵呵,仔细分析了一晚,还是有很多收获的