java基本烈性占用字节数,java 占用内存估算及分析

[最近对程序占用内存方面做了一些优化,取得了不错的效果,总结了一些经验简要说一下,相信会对大家写出优质的程序有所帮助下面的论述针对32位系� ...]

先看如下两段代码

Double[] ds = new Double[10000000];

double[] ds = new double[10000000];

两段代码分别创建了两个1000万的数组,查看进程管理器Double的占用内存为40多M,而double的占用内存为80多M

分析: Double创建了一个1000万个空指针的数组,而每个指针占用4byte的内存,而每个double会占用8个byte的内存

经济算( 10000000 * 8) / 1024 /1024  = 76M左右  基本符合实际情况

但是如下代码却会占用260M左右的内存,不知道为什么[数据库数据在Java占用内存简单估算 结论:1.数据库记录放在JAVA里,用对象(ORM一般的处理方式)需要4倍左右的内存空间,用HashMap这种KV保存需要10倍空间;2.如果你主要数据

以我来看,40M的指针+80M的实际数据空间 = 120M 应该正好

备用URL

List d = new ArrayList();

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

d.add((double)i);

}

看了这篇文章,知道,每个对象都会有一个8字节的housekeeping,而且如果对象字节大小不是8的倍数还会有填充,

按照这个计算,40M +2*80M大概占用200M内存。还是有所偏差,继续研究。[在工作中可能会遇到内存溢出这种灾难性的问题,那么程序肯定是存在问题,找出问题至关重要,上一篇文章讲了jmap命令的使用方法,当然用jmap导出的文件我们也看不懂啊,那

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值