У меня есть статический объект ThreadLocal в моем веб-приложении, где я инициализирую его некоторым значением по умолчанию в классе фильтра веб-сервлета перед обработкой запроса. В приложении несколько других классов (таких как процессоры) используют и обновляют его значение. Я читал в некоторых статьях, что объекты, созданные с помощью ThreadLocal, по-прежнему связаны с потоками, хотя процесс запроса завершен, поскольку потоки поддерживаются в пуле, управляемом контейнером. Это приводит к утечкам памяти, если объекты не удаляются из переменной ThreadLocal.
В связи с этим у меня два вопроса.
Какой из приведенных ниже вариантов является лучшим и правильным способом удалить его ссылку, чтобы предотвратить утечку памяти.
ThreadLocal obj; 1) obj.remove(); // remove the contents of ThreadLocal. 2) obj.set(""); // set some default value 3) obj.set(null); // set null