Java中的对象大小

nul*_*ptr 3 java object

假设我有:

Class A{
   int a;
}

A obj = new A();
Run Code Online (Sandbox Code Playgroud)

然后obj的大小是多少?它是否与int大小相同,就像在C中一样?

如果我能弄清楚这一点,那么我可以在不使用数据库的情况下将大型HashMap保留在RAM中.

提前致谢.

编辑

朋友们,

其实我有:

HashMap<Long, List<T>> map;
Run Code Online (Sandbox Code Playgroud)

class T{
   private int a;
   private int b;
   private int c;
   // constructor, getters and setters
}
Run Code Online (Sandbox Code Playgroud)

并且地图的大小可能会增长到10000000个密钥,对于每个密钥,我将有100-1000的大小列表.

整个地图会留在堆里吗?

编辑2

当我用大约70000个密钥加载地图时,当我将其序列化为文件时,文件大约为18 MB,那么我的地图堆中是18 MB吗?

Evg*_*eev 7

它可能依赖于JVM,但实际上,对于32位JVM,对象= 8-byte header + fields.标题包含Id +对类的引用.

字段大小取决于字段类型,引用 - 8字节,布尔值 - 1字节等

除了对象对齐到8个字节.那是你的A需要16个字节.最小大小= 8个字节,没有字段.

更多信息请访问http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

如果使用Oracle JVM,则可以使用sun.misc.Unsafe逐字节地调查对象结构.