国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > 数据库数据在Java占用内存简单估算

数据库数据在Java占用内存简单估算

来源:程序员人生   发布时间:2014-11-14 08:15:25 阅读次数:2702次

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

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生

------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生