Весь оверхед связан с необходимостью автоматической сборки мусора. Если ваши алгоритмы предполагают наличие 100 млн объектов с возможностью произвольного доступа, то имеет смысл задуматься о самостоятельном управлении памятью, которую они занимают. Все эти объекты должны существовать вместе и уничтожаться будут тоже все разом, поэтому нет необходимости гонять сборщик мусора над ними. Поэтому заведите большой массив с данными и обертку, которая их вынимает по различным запросам.
В 8-й яве System.gc() никаких видимых изменений в куче не производит. По крайней мере в тех экспериментах, которые я сам проводил. Единственный надежный способ выполнить полную сборку мусора — это сделать дамп кучи только с живыми объектами.
Да, зависит. А также зависит от соотношения количества операций вставки со всеми остальными операциями. Но вывод о том, что ArrayList или ArrayDeque всегда лучше LinkedList, все равно остается неверным. Именно с этим выводом, сделанным в статье, я не согласен. Нетрудно подобрать такие параметры коллекции и варианты использования, при которых LinkedList будет работать лучше.
Кстати, хорошая идея — реализовать LinkedList на массиве. Надо будет при случае попробовать.
Тогда вобщем-то понятно из-за чего происходило торможение. GC останавливает поток, работающий в synchronized-методе, а за ним останавливаются и многие другие потоки на входе в этот метод. В результате получается, что каждая малая сборка работает как stop-the-world.
Наблюдал работу G1 под нагрузкой. По сравнению с ParallelGC просадка 30-40%. Зависит, конечно, от конкретной системы, но я бы пользоваться G1 без сравнительного тестирования не рекомендовал.
Мордой некоторые разработчики называют клиентский веб-интерфейс. Обычный профессиональный сленг. Соответственно NEW_MORDA — это обновленный веб-интерфейс.
java version «1.8.0_102»
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Кстати, хорошая идея — реализовать LinkedList на массиве. Надо будет при случае попробовать.
Если есть необходимость вставки в середину, то надо использовать LinkedList, и то, что эта задача названа экзотической, ничего не меняет.
Тогда вобщем-то понятно из-за чего происходило торможение. GC останавливает поток, работающий в synchronized-методе, а за ним останавливаются и многие другие потоки на входе в этот метод. В результате получается, что каждая малая сборка работает как stop-the-world.
А правильно ли я понимаю, что G1 во время малой сборки приостанавливает отдельные потоки?
Меня вот такие записи смутили
Такие пустяки ловятся легко без антивируса.
Паниковский не обязан всему верить.
ОС налажена, но я ей не доверяю. Береженого бог бережет.