在内存上获取地图大小(RAM)

NIV*_*GAR 5 java memory map

我正在使用HashMap在应用程序启动时缓存一些重要数据.
此缓存有时会增长然后减少.我想知道它在RAM上占用了多少内存.
是否有可能以KB格式获取地图内存?有API吗?

mar*_*pes 10

我正在使用此方法来估计MAP大小:

public static void size(Map map) {
    try{
        System.out.println("Index Size: " + map.size());
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        ObjectOutputStream oos=new ObjectOutputStream(baos);
        oos.writeObject(map);
        oos.close();
        System.out.println("Data Size: " + baos.size());
    }catch(IOException e){
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)


AVa*_*hev 7

有一个很好的工具用于此目的:ClassMexer

您可以通过以下方式估计HashMap的内存,包括引用的对象:

long noBytes = MemoryUtil.deepMemoryUsageOf(myCacheMap);