В исходном коде класса SoftReference
есть такое поле:
/**
* Timestamp updated by each invocation of the get method. The VM may use
* this field when selecting soft references to be cleared, but it is not
* required to do so.
*/
private long timestamp;
Согласно документации к методу, каждый вызов get
должен приводить к обновлению поля timestamp
. Но этого не происходит и я не могу понять почему. В качестве эксперемента написал такой класс:
import java.lang.ref.SoftReference;
import java.lang.reflect.Field;
public class SoftReferenceTest {
public static void main(String[] args) throws Exception {
SoftReference<StringBuilder> softReference = new SoftReference<>(new StringBuilder());
long timestamp = getTimestamp(softReference);
for (int i = 0; i < 10; i++) {
checkTimestampChange(softReference, timestamp);
}
}
private static void checkTimestampChange(SoftReference softReference, long timestampBefore) throws Exception {
softReference.get();
Thread.sleep(100);
assert timestampBefore == getTimestamp(softReference);
}
private static long getTimestamp(Object object) throws Exception {
Field timestampField = SoftReference.class.getDeclaredField("timestamp");
timestampField.setAccessible(true);
long timestamp = timestampField.getLong(object);
timestampField.setAccessible(false);
return timestamp;
}
}
Код успешно выполнился без ошибок. Не могу понять почему.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Стоит ли бросать Java 8 и продолжать свое обучение с Java 10? Тем более, как я слышал, они рассматривают идею перейти на полугодовой график релизов...
Проблема в следующем - хочу сделать мультиязычное Java web-приложение, чтобы во всех страницах приложения была возможность переключаться между...
Есть бд с такой структуройКак написать запрос который бы выдавал fio, price, quality и telephone зная только fromUser из таблицы bids?