假设我有:
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吗?
它可能依赖于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逐字节地调查对象结构.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |