Как заставить Java-систему выпускать Soft References?

Я собираюсь использовать кеш на основе SoftReference (само по себе довольно простая вещь). Однако при написании теста я столкнулся с проблемой.

Цель теста - проверить, запрашивает ли кэш ранее кэшированный объект у сервера снова после того, как происходит очистка памяти.

Здесь я обнаружил проблему, как заставить систему освобождать мягкие ссылочные объекты. Вызова System.gc () недостаточно, потому что мягкие ссылки не будут освобождены до тех пор, пока память не станет низкой. Я запускаю этот модульный тест на ПК, поэтому бюджет памяти для виртуальной машины может быть довольно большим.

================== Добавлено позже ===== =========================

Спасибо всем, кто постарался ответить!

Рассмотрев все за и против, я решил использовать метод грубой силы, как советуют nanda и jarnbjo . Оказалось, однако, что JVM не так уж и глупа - победила ' Не пытайтесь даже выполнить сборку мусора, если вы запрашиваете блок, который сам по себе превышает бюджет памяти виртуальной машины. Поэтому я изменил код следующим образом:

    /* Force releasing SoftReferences */
    try {
        final List<long[]> memhog = new LinkedList<long[]>();
        while(true) {
            memhog.add(new long[102400]);
        }
    }
    catch(final OutOfMemoryError e) {
        /* At this point all SoftReferences have been released - GUARANTEED. */
    }

    /* continue the test here */
17
задан JBM 24 September 2010 в 10:39
поделиться