背景
由于打算对设备信息做本地缓存,所以需要估算下内存占用情况,以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
网友评论