java map 内存_java 使用对象和Map保存字符串占用存储空间对比

对整体堆大小的影响

创建对象情况

已使用的堆大小

没有使用任何对象

95,805,912 个字节

使用map10000000个相同字符串

1,017,388,888 个字节

创建10000000个空对象

432,016,408 个字节

创建10000000个包含值的对象

445,142,664 个字节

dump堆内存查看详细内容:

没有使用map和对象的堆dump

0ef71fc0d315

image.png

使用map保存10000000个相同字符串的堆dump

0ef71fc0d315

image.png

创建10000000个空对象的堆dump

0ef71fc0d315

image.png

创建10000000个保存相同字符串的堆dump

0ef71fc0d315

image.png

package com.example.demo.mongodb.service;

import com.example.demo.mongodb.model.User;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* 类描述

*

* @author duxuefu

* @date 2020-07-27

*/

@Component

public class MapService {

private static final Logger logger = LoggerFactory.getLogger(MapService.class);

private String s = "国家标准 GB 18030-2005《信息技术 中文编码字符集》,是中华人民共和国现时最新的内码字集,与 GB 2312-1980 完全兼容,与 GBK 基本兼容,支持 GB 13000 及 Unicode 的全部统一汉字,共收录汉字 70244 个。现行版本为国家质量监督检验总局和中国国家标准化管理委员会于2005年11月8日发布,2006年5月1日实施,为在中国境内所有软件产品支持的强制标准。";

private Map map = new HashMap<>();

List users = new ArrayList<>();

public MapService() {

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

map.put(Integer.toString(i), s);

User user = new User();

user.setProfile(s);

users.add(user);

}

}

}

package com.example.demo.mongodb.model;

import lombok.Data;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* 类描述

*

* @author duxuefu

* @date 2020-07-08

*/

@Data

public class User {

private int id;

private String name;

private String sex;

private String profile;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值