Я работаю над процессом, который занимает много времени и, следовательно, необходимо время от времени обновлять статус завершения задачи.
Я использую статический ConcurrentHashMap для хранения сообщения о состоянии, соответствующего ключу процесса (одновременно может быть несколько похожих процессов).
Клиент отправляет запросы с установленным интервалом для проверки статуса.
Я тщательно удалил ключевую запись на карте после завершения процесса. Тем не менее, когда я использую jmap для просмотра использования кучи, ConcurrentHashMap, по-видимому, использует ее в большом количестве.
// initialisation
public static Map<String, String> messageMap = new ConcurrentHashMap<>();
// insertion
messageMap.put(key, message);
// removing
message.remove(key);
Команда "jmap -histo" выдала следующий вывод
num #instances #bytes class name
----------------------------------------------
1: 1730496 104093392 [C
2: 106 96288352 [F
3: 891190 21388560 java.lang.String
4: 6728 5574856 [I
5: 51676 2067040 java.util.HashMap$KeyIterator
6: 25850 1447600
java.util.concurrent.ConcurrentHashMap$KeyIterator
7: 12673 1115224 java.lang.reflect.Method
8: 2020 958680 [B
9: 28021 896672
java.util.concurrent.ConcurrentHashMap$Node
10: 7793 869360 java.lang.Class
11: 17234 689360 java.util.TreeMap$Entry
12: 15294 611760 java.util.LinkedHashMap$Entry
13: 5772 419336 [Ljava.util.HashMap$Node;
14: 7797 411616 [Ljava.lang.Object;
15: 6938 388528 java.util.LinkedHashMap
16: 235 309056
[Ljava.util.concurrent.ConcurrentHashMap$Node;
17: 9201 294432 java.util.HashMap$Node
18: 18307 292912 java.lang.Object
-----removed extra lines for clarity-----
Пожалуйста, предложите, если это может быть причиной проблемы, или мне нужен совершенно другой подход для обновления статуса.