[最近对程序占用内存方面做了一些优化,取得了不错的效果,总结了一些经验简要说一下,相信会对大家写出优质的程序有所帮助下面的论述针对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导出的文件我们也看不懂啊,那