Java: стоимость вызова Runtime.freeMemory (), Runtime.totalMemory () и Runtime.maxMemory ()

У меня есть Map в памяти, в которой хранятся мои объекты. Я хочу сбросить в память, когда у меня заканчивается память. Я делаю это прямо сейчас:

void add(K key, V value) {
    if (underPressure()) {
        flush(innerMap);
    }
    innerMap.add(k, v);
}

boolean underPressure() {
    Runtime rt = Runtime.getRuntime();
    long maxMemory = rt.maxMemory();
    long freeMemory = rt.freeMemory();

    return (double) freeMemory / maxMemory < threshold;
}

Поскольку underPressure () вызывается при каждой вставке, насколько это дорого? Насколько я понимаю, это приблизительное значение, оно должно быть каким-то образом кэшировано jvm, но знает ли кто-нибудь об этом больше на самом деле?

9
задан Bhesh Gurung 15 December 2011 в 16:49
поделиться