Java基本数据类型
int 32bit
short 16bit
long 64bit
byte 8bit
char 16bit
float 32bit
double 64bit
boolean 1bit
This data type represents one bit of information, but its "size" isn't something that's precisely defined.(ref)
Java基本数据类型大小
private static void calSize() {
System.out.println("Integer: " + Integer.SIZE/8); // 4
System.out.println("Short: " + Short.SIZE/8); // 2
System.out.println("Long: " + Long.SIZE/8); // 8
System.out.println("Byte: " + Byte.SIZE/8); // 1
System.out.println("Character: " + Character.SIZE/8); // 2
System.out.println("Float: " + Float.SIZE/8); // 4
System.out.println("Double: " + Double.SIZE/8); // 8
// System.out.println("Boolean: " + Boolean);
}
Java中模拟c中对sizeof的实现
思路:利用java中GC内存回收前后的heap size差别,得出每个object的大小。
这是一个程序,java中没有现成的sizeof的实现,原因主要是java中的基本数据类型的大小都是固定的,所以看上去没有必要用sizeof这个关键字。 实现的想法是这样的:java.lang.Runtime类中有一些简单的能涉及到内存管理的函数: Every Java application has a single instance of class Runtime that allows the application to interface with the environment in which the application is running. The current runtime can be obtained from the getRuntime method. 使用这些简单的内存访问,可以得到内存的一些情况,我们通过建立一个大的某个类的数组,来查看内存用了多少,进而可以求得类的大小。 源码:
注意:Object[] objects = new Object[count]; 只是分配了数组空间,没有分配对象的空间。数组中只有引用而已。 结论:下代码测试基本对象时,得出的结果象下面: Object obj = null; 这个例子写的很好,正好说明了java中基本类型封装对象所占内存的大小. Object所占内存(8个字节) + int所占内存(4个字节) = 12字节 + 补充4字节 = 16字节. 4. 对齐补充用于确保对象的总长度为8字节的整数倍。 也就是说,Integer对象虽然占用了16个字节的内存,但是只是利用了12个字节,还有4个字节根本没有被使用.呵呵,仔细分析了一晚,还是有很多收获的 测试源码下载
|