java获取对象占用的内存,java怎么获取对象占用内存大小

java如何获取对象占用内存大小?

如何获取对象占用多大内存。读了一个11M的文本,分词用HashMap存起来,打印内存居然少了400M,想看看内存被谁占用了

分享到:

------解决方案--------------------

11M文本,假设每个词占10个字节都有110W个词组左右。

比如key为词组,value为词频,算上java中对象的额外空间,以及hash结构的开销,是不是差不多要几百M。

这个时候选择一个好的数据结构就比较合适了。比如分词使用trie树可以看看会不会达到你要的效果。

------解决方案--------------------

应该是HashMap占用了比较多。一个非常简单的测试方法,在你认为消耗内存的前后打印下当前使用的内存:

import java.util.HashMap;

import java.util.Map;

public class MemoryTest {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

System.gc();

long total = Runtime.getRuntime().totalMemory(); // byte

long m1 = Runtime.getRuntime().freeMemory();

System.out.println("before:" + (total - m1));

Map map = new HashMap();

for(int i=0; i 

map.put(new Object(), new Object());

}

long total1 = Runtime.getRuntime().totalMemory();

long m2 = Runtime.getRuntime().freeMemory();

System.out.println("after:" + (total1 - m2));

System.out.println(map.toString());

}

}

打印结果:

before:494872

after:825272

{java.lang.Object@41fae3c6=java.lang.Object@6727734f, java.lang.Object@4506411=java.lang.Object@4f037c71, java.lang.Object@39d99a4d=java.lang.Object@6ddf073d, java.lang.Object@95c7850=java.lang.Object@4d546e25, java.lang.Object@37dd7056=java.lang.Object@620b66cc, java.lang.Object@1f24bbbf=java.lang.Object@5a8a0d5d, java.lang.Object@6ac2a132=java.lang.Object@1d73831b, java.lang.Object@44fd13b5=java.lang.Object@aa470b8, java.lang.Object@6a8814e9=java.lang.Object@31e4457d, java.lang.Object@41d5550d=java.lang.Object@18e2b22, java.lang.Object@2687816d=java.lang.Object@1cb1c5fa, java.lang.Object@16c9ba38=java.lang.Object@5b3caecd, java.lang.Object@8dd20f6=java.lang.Object@6cf84386, java.lang.Object@229ed927=java.lang.Object@1f194a4e, java.lang.Object@7bdecdec=java.lang.Object@355d56d5, java.lang.Object@4318f375=java.lang.Object@2efd552, java.lang.Object@7000a32b=java.lang.Object@4f9dfbff, java.lang.Object@27430b5c=java.lang.Object@d0b4b2f, java.lang.Object@5456a499=java.lang.Object@60750159, java.lang.Object@4310b053=java.lang.Object@21abab88, java.lang.Object@1ff9dc36=java.lang.Object@d8a7efd, java.lang.Object@6d9efb05=java.lang.Object@7f971afc, java.lang.Object@55e859c0=java.lang.Object@196cd7d5, java.lang.Object@7ca83b8a=java.lang.Object@38cdedfd, java.lang.Object@13aaa14a=java.lang.Object@57c39a2d, java.lang.Object@3d4b7453=java.lang.Object@6abf2d5e, java.lang.Object@26021b6d=java.lang.Object@2d3bad12, java.lang.Object@3d833955=java.lang.Object@28df8ff1, java.lang.Object@40a0dcd9=java.lang.Object@6d632c2d, java.lang.Object@5b86d4c1=java.lang.Object@9e97676, java.lang.Object@2b820dda=java.lang.Object@3e60420f, java.lang.Object@2da679b7=java.lang.Object@219106c7, java.lang.Object@ce102dc=java.lang.Object@38540408, java.lang.Object@7d2152e6=java.lang.Object@13d4c61c, java.lang.Object@3a3ee284=java.lang.Object@761a626f, java.lang.Object@5013582d=java.lang.Object@3e34a1fc, java.lang.Object@59de3f2d=java.lang.Object@7176c74b, java.lang.Object@4383f74d=java.lang.Object@2d16471f, java.lang.Object@7f5f5897=java.lang.Object@11975b59, java.lang.Object@2fe4cbc4=java.lang.Object@67ee3914, java.lang.Object@7d67d940=java.lang.Object@48e5855a, java.lang.Object@6c22c95b=java.lang.Object@5495fd19, java.lang.Object@11cfb549=java.lang.Object@431b9fb1, java.lang.Object@2586db54=java.lang.Object@4a913fe2, java.lang.Object@68ab95e6=java.lang.Object@5f934ad, java.lang.Object@7b11a3ac=java.lang.Object@2bf14ceb, java.lang.Object@50337d0f=java.lang.Object@6ef0eed6, java.lang.Object@4cb162d5=java.lang.Object@bd05c81, java.lang.Object@eb166b5=java.lang.Object@1c691f36, java.lang.Object@3e7ffe01=java.lang.Object@398020cc, java.lang.Object@5e743399=java.lang.Object@ae94e92, java.lang.Object@20cdfc9c=java.lang.Object@5b2558d6, java.lang.Object@15ded0fd=java.lang.Object@70eb7859, java.lang.Object@c1503a3=java.lang.Object@732a54f9, java.lang.Object@37a1c887=java.lang.Object@6030e280, java.lang.Object@2afa3ac1=java.lang.Object@296672d6, java.lang.Object@1034bb5=java.lang.Object@4fd54d6, java.lang.Object@882c01f=java.lang.Object@13ccb029, java.lang.Object@8b2fd8f=java.lang.Object@63415de6, java.lang.Object@3f0ef90c=java.lang.Object@587bd9f2, java.lang.Object@576a9d42=java.lang.Object@2b21cc40, java.lang.Object@12276af2=java.lang.Object@37e893df, java.lang.Object@60a1807c=java.lang.Object@6443226, java.lang.Object@768965fb=java.lang.Object@67386000, java.lang.Object@e05d173=java.lang.Object@2626d4f1, java.lang.Object@1ee7b241=java.lang.Object@3f662dc8, java.lang.Object@c80f4cb=java.lang.Object@4d47c5fc, java.lang.Object@64578ceb=java.lang.Object@23174b07, java.lang.Object@15e0be38=java.lang.Object@4e3eca90, java.lang.Object@664741d6=java.lang.Object@7c64dc11, java.lang.Object@70f9f9d8=java.lang.Object@41ac1fe4, java.lang.Object@1b17a8bd=java.lang.Object@b61d36b, java.lang.Object@72291aff=java.lang.Object@437f1ba3, java.lang.Object@7f12f614=java.lang.Object@4def8cf3, java.lang.Object@afa7e74=java.lang.Object@2a0ecd7e, java.lang.Object@39d8957f=java.lang.Object@31d520c4, java.lang.Object@35d9dc39=java.lang.Object@1f5a3d6b, java.lang.Object@38a97b0b=java.lang.Object@5d764be1, java.lang.Object@4ce86da0=java.lang.Object@16fd0b7, java.lang.Object@33837697=java.lang.Object@53ef9f1d, java.lang.Object@3cb89838=java.lang.Object@18b753f8, java.lang.Object@2e471e30=java.lang.Object@2be9cb75, java.lang.Object@5fd1acd3=java.lang.Object@22c84d9, java.lang.Object@2ce83912=java.lang.Object@38c5c3ac, java.lang.Object@58fe64b9=java.lang.Object@3fb16e52, java.lang.Object@3ea981ca=java.lang.Object@19c1ea29, java.lang.Object@24c21495=java.lang.Object@9f436f5, java.lang.Object@187a84e4=java.lang.Object@4413ee, java.lang.Object@60723d7c=java.lang.Object@75786e64, java.lang.Object@a422ede=java.lang.Object@3597a37c, java.lang.Object@40133796=java.lang.Object@766e3d60, java.lang.Object@72093dcd=java.lang.Object@3f7fa65e, java.lang.Object@1cc2ea3f=java.lang.Object@558385e3, java.lang.Object@675b7986=java.lang.Object@2dcb25f1, java.lang.Object@36867e89=java.lang.Object@742808b3, java.lang.Object@55fdc96c=java.lang.Object@70535b58, java.lang.Object@2f754ad2=java.lang.Object@70922804, java.lang.Object@7ecd2c3c=java.lang.Object@b815859, java.lang.Object@79616c7=java.lang.Object@58cf40f5, java.lang.Object@fe51060=java.lang.Object@eb1c260}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值