http://www.wfuyu.com/db/数据在Java占用内存简单估算
结论:
1.http://www.wfuyu.com/db/记录放在JAVA里,用对象(ORM1般的处理方式)需要4倍左右的内存空间,用HashMap这类KV保存需要10倍空间;
2.如果你主要数据是text大文本,那空间1般可以按2倍估算。
以上是1个通用数据测试结论,估大家参考。
http://www.wfuyu.com/db/记录占用的空间大小比较好算,比如1个int占用4字节,bigint占用8字节,date占用3字节,datetime占用8字节,varchar是变长字节等。如果不想精确计算,在http://www.wfuyu.com/db/中通过统计信息也能够比较轻松的知道表总共占用的空间及每条记录平均行长。
当我们用JDBC访问http://www.wfuyu.com/db/时,常常会被问到内存溢出的问题,由于java是面向对象的语言,用JVM来自动内存回收,不能按普通方法计算内存,本文给出1个估算内存的思路和参考答案
先给出普通JDBC中http://www.wfuyu.com/db/对象与内存的映照关系
MySQL |
http://www.wfuyu.com/oracle/ |
JDBC |
Int |
Integer |
|
Int unsigned |
Long |
|
BigInt |
Long |
|
BigInt unsigned |
BigInteger |
|
Decimal |
Number |
BigDecimal |
Varchar |
Varchar2 |
String |
Date |
Date |
|
Datetime |
Date |
Timestamp |
Timestamp |
Timestamp |
Timestamp |
Clob |
Clob |
String |
Blob |
blob |
Byte[] |
Text |
Clob |
String |
float |
binary_float |
float |
double |
binary_double |
double |
上面这个比较好理解,接下来我们需要JAVA经常使用对象的内存占用空间,这个可以通过JDK 5 开始提供的Instrumentation 接口来完成,也能够通过开源的sizeOf.jar 来测试,笔者是通过sizeOf.jar验证的。测试结果数据以下:
对象 |
64位 JVM 紧缩指针 |
64位 JVM 非紧缩指针 |
Integer |
16 |
24 |
Long |
24 |
24 |
Object |
16 |
16 |
Date |
24 |
32 |
Timestamp |
32 |
40 |
String_0 |
48 |
64 |
String_1 |
56 |
72 |
String_10 |
72 |
88 |
String_100 |
248 |
264 |
StringBuilder |
24 |
32 |
BigDecimal |
40 |
48 |
BigInteger |
64 |
80 |
HashMap |
128 |
216 |
HashMap_0 |
72 |
------分隔线----------------------------
上一篇 Cocos2d-X使用CCAnimation创建动画 下一篇 水平三栏式布局
------分隔线----------------------------
最新技术推荐 |