程序员人生 网站导航

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

栏目:互联网时间:2014-11-14 08:15:25

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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐

1.cyou 非常适合 Z 世代企业家的三大理由 2阿里、京东类ChatGPT产品正在内测 未来或将融入产品 3公会积极复工复产,2023直播行业有哪些新机遇? 4第三届OpenHarmony技术大会展区亮点纷呈,全方位洞见智慧互联未来 5第三届OpenHarmony技术大会应用生态实践分论坛成功举办 6第三届OpenHarmony技术大会OS安全分论坛圆满举办 7第三届 OpenHarmony 技术大会:创新成果丰硕,共筑开源生态新未来