从memcached获取其他对象后更改了使用的内存dosnt

时间:2016-05-13 11:31:16

标签: java garbage-collection

我从memcahced加载数据后转储所有内存(jmap -histo),然后我再次加载相同的数据(数据加载到另一个实例),但使用的内存没有更改。 没有GC完成(我分配2g新大小的堆并检查jstat和另一个没有gc的工具)。 第二个堆包含我从memcached加载的类型中的2个实例。 我在第一次加载后将第二次加载后的堆与堆进行比较。 第二个堆在任何类中都有比第一个堆更多的实例,除了[我认为第二个堆少于第一个堆。堆中其他类之间的间隙(字节)相同,就像[I。

的间隙一样

我查看字节码并没有看到任何可疑的内容。有什么想法吗?

public static void main(String[] args) throws Throwable { 
              Object a1 = mc.get("userClient"); 
              -- get dump

             Object a11  = mc.get("userClient");
             -- get dump
             mc.shutdown();
}

1 个答案:

答案 0 :(得分:0)

如果你想在堆上看到一个Object的大小,那么关闭TLAB(-XX:-UseTLAB)并监视Runtime.freeMemory()中的更改(转储更好,因为freememory是近似值),同时创建一个宾语。此技术仅适用于添加到堆中的对象,因此添加到堆栈的局部变量不会显示。