Java对象占用内存估算

2021-09-14  本文已影响0人  淡淡的小番茄

背景

由于打算对设备信息做本地缓存,所以需要估算下内存占用情况,以20万设备为例。

内存估算

一条消息的大小:164字节。

20万设备占用的内存:164*200000/1024/1024=31.28M

这个是数据的原始大小,使用JAVA对象存储的时候,占用的空间会大很多。这块我们写了个main方法进行了数据大小预估。直接写一个main方法,将20万个对象初始化好后,存放到map中。

public static void main(String[] args) {

int i = 200000;

while(i-->=0){

DeviceInfo deviceInfo = new DeviceInfo();

deviceInfo.setDeviceName("autobFwu6oqiK4EmNgH"+"_"+i);

deviceInfo.setIccid("89860620150005215359"+"_"+i);

deviceInfo.setImei("808000000000116"+"_"+i);

deviceInfo.setIotid("49b559c4fa40472db3ddafef748395d9"+"_"+i);

deviceInfo.setLabels("11003,11004,11005"+"_"+i);

devices.put(deviceInfo.getIotid(), deviceInfo);

}

try {

Thread.sleep(1000000000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

执行程序

java cn.cuiot.dmp.flink.dto.DeviceInfo

通过jps找到程序的进程号

使用jmap打印对象信息

jmap -histo 8370

实际占用内存空间,换算为M:

151341904/1024/1034=144.33M

数据的原始大小:31.28M

比例:144.33/31.28=4.61

上一篇 下一篇

猜你喜欢

热点阅读