Подниму пожалуй темку из-за одного странного случая, а возможно бага в API Java 8.
Недавно перевел сервер на восьмерку, все бы прекрасно, если бы сегодня не заметил дикое потребление оперативки, причем явно мусорное (до 5,5гб мусора за несколько секунд).
Профайлер показал бесконечный цикл там, где по сути его и быть то не должно.
В качестве примера я набросал тест-кейс (
код тут) и опробовал под Java 6-7 и Java 8. Результат меня удивил.
Под 6 и 7 работает как должен (см. вывод на ideone).
Под восьмёркой же, что-то нездоровое происходит с итератором:
Цитата:--> 544 8966093/18
--> 672 8966094/18
--> 544 8966095/18
--> 672 8966096/18
--> 544 8966097/18
--> 672 8966098/18
(С обычным HashMap тем временем все ок, возбуждает CME.)
Методом тыка и удалением операции map.remove удалось нормализовать работу на Java 8.
Разумеется, map.delete в связке с map.put не имеет смысла. Но, как бы, подобный
гомнолегаси код (а я боюсь что такая конструкция не единственная) становится абсолютно нерабочим на Java 8, чего уж быть явно не должно.
Есть у кого какие мнения?