Может ли статический ConcurrentHashMaps вызывать проблемы при длительном хранении в памяти? - PullRequest
0 голосов
/ 20 мая 2019

Я работаю над процессом, который занимает много времени и, следовательно, необходимо время от времени обновлять статус завершения задачи. Я использую статический 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-----

Пожалуйста, предложите, если это может быть причиной проблемы, или мне нужен совершенно другой подход для обновления статуса.

...