java 内存 map_Java内存优化 - Pojo vs Map

项目中大量使用了HashMap来存储各种数据结构,尤其是SNMP数据和缓存数据。由于HashMap需要有额外的信息来保存整个数据结构,如果在数据量大的情况下内存开销会大于POJO的结构。下面的一组测试可以对比Pojo和Map两种数据结构内存使用情况。

方法

简单数据对象包含三个Field: int/string/long

HashMap包含同样三个数据, int/string and long

通过持有10k记录的POJO对象和HashMap对象来比较内存

利用MemoryAnalyzer分析内存

代码

public class MemUsageCompare {

static Map> mapData = new HashMap<>();

static Map entData = new HashMap<>();

static void mapDataTest(int c) {

for(int i = 0; i < c; i ++) {

String index = i+"";

Map data = new HashMap<>();

data.put("1", i + "");

data.put("2", "abcdefghijklmn" + i);

data.put("3", "" + i);

mapData.put(index, data);

}

}

static void entDataTest(int c) {

for(int i = 0; i < c; i ++) {

String inx = i+"";

DataEntity ent = new DataEntity();

ent.id = i;

ent.name = "abcdefghijklmn" + i;

ent.longData = 1L;

entData.put(inx, ent);

}

}

public static void main(String[] args) throws InterruptedException {

mapDataTest(10000);

entDataTest(10000);

Thread.sleep(100000000);

}

}

class DataEntity {

public int id;

public String name;

public long longData;

}

结果

List Object

10kPOJO对象放在HashMap,占用了1984800字节

10kMap对象放在HashMap,占用了4864944字节

内存比大约为 POJO/HashMap = 0.41/1

1574942

1574942

32d4de20089d618bb0561138469d5b4b.png

POJO对象要比HashMap节省超过一半的内存。当然随着存储出具类型的不同,可能还会有变化,但是总对于需要大量缓存数据的场合,建议还是使用POJO替代Map对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值