问题描述
最近做的一个需求,完成以后需要对内存进行分析。处理10000条数据,先打印出dump
文件,然后使用Eclipse Memory Analyzer
工具进行分析。
结果发现有些数据占用内存高达250多KB,按期望应该不能高于64KB
的,导致系统内存使用较高。
原因分析
系统收到的数据类型是byte[]
,对byte
数组进行处理 --> 每一个byte
,转化为16进制字符串(高4位、低4位各一个字符),进过这一步,相当由一个byte
得到了两个char
。而由于java
的特性,一个char
占2个字节,两个char
就是4个字节。
由此,一个byte
数据经过一系列处理得到了string
,但却使用了4个字节,内存使用翻了4倍!
找到了这个原因,那么我们就可以找到相应代码做修改了,存储不使用string
,而改用原始的byte[]
,内存使用得到明显的降低!
10000条数据修改前:
![](https://i-blog.csdnimg.cn/blog_migrate/15ba0d977ef9e5f210a587babe4c1de6.jpeg)
10000条数据修改后:
![](https://i-blog.csdnimg.cn/blog_migrate/1262627cc791c5e1e5534dc726197f33.jpeg)