如何计算Ehcache中的内存大小?

时间:2018-01-23 07:55:23

标签: memory ehcache memorycache ehcache-2

import java.util.ArrayList;
import java.util.List;

import net.sf.ehcache.pool.sizeof.UnsafeSizeOf;

public class EhCacheTest {

    private List<Double> testList = new ArrayList<Double>();

    public static void main(String[] args) {
        EhCacheTest test = new EhCacheTest();
        for(int i=0;i<1000;i++) {
            test.addItem(1.0);
            System.out.println(new UnsafeSizeOf().sizeOf(test));
        }
    }

    public void addItem(double a) {
        testList.add(a);
    }
}

我使用UnsafeSizeOf来计算Object&#39; test&#39;的大小。 Nomatter我在列表中添加了多少双打,&#39; test&#39;总是16个字节。

因此,maxBytesLocalHeap参数对我来说毫无用处。

1 个答案:

答案 0 :(得分:0)

鉴于您的代码段,这是完全可以预料的。

请参阅方法SizeOf.sizeOf的{​​{3}},它明确指出它在不使用导航对象图的情况下调整实例的大小。

您要使用的是SizeOf.deepSizeOf,它将导航对象图。

然而,这个测试存在缺陷,导致您将特定SizeOf实现与另一个实现进行比较的风险,因为Ehcache使用多个实现,具体取决于特定环境中的可用内容。

如果你真的想确认堆上的字节大小是否有效,你最好填写一个缓存,找出它通过统计报告的大小,然后进行堆转储以查看有效使用了多少内存。