Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
то есть вроде как и параллельная, но на практике последовательная сборка? тогда не понимаю, почему сборщик в .net так люто все плюсуют, если он не обеспечивает нормальной работы без больших провалов (извиняюсь за вопрос, так как сам на java специализируюсь)
то есть вроде как и параллельная, но на практике последовательная сборка? тогда не понимаю, почему сборщик в .net так люто все плюсуют, если он не обеспечивает нормальной работы без больших провалов (извиняюсь за вопрос, так как сам на java специализируюсь)
в общем случае да, но во многих местах тот же EscapeAnalysis и последующий EliminateAutoBox неплохо спасает
есть, но в намного более простом варианте, поддерка профайлинга отсутствует, девиртуализация вызовов тоже, в итоге инлайнинг что и есть, то зачастую только некоторых невиртуальных методов
по поводу «большинство вызовов невиртуальные» я бы поспорил
вот в этом мы и отличаемся =) в java более медленный старт и обусловлен, что главная цель это быстрая работа в долгоживущих серверных приложениях, а не коротких десктопных.
10% производительности от инлайнингаДля большинства приложений это нереально. Инлайнинг спасает в так называемых тесных циклах, когда кроме вызова функции в теле цикла почти ничего нет, а в самом теле функци выполняются только вычислительные операции.
А данный пост показывает лишь то, что перед выпуском приложения не проводилось какое-либо нагрузочное тестированиеЭто организационный аспект. Нагрузочное тестирование выявило бы те же самые проблемы.
«порог — 80%, продолжительностью — 15 секунд» — извиняюсь, но 15 секунд собирать мусор это МНОГО, что еще раз говорит, о плохом gcВо-первых 15 секунд это не время GC, а время, когда приложение работает, а не ждет ответа базы, что вообще не говорит о работе GC. Во вторых gc тут совершенно не при чем. Попробуйте в любом приложении на любом языке в секунду выделять по 500 мб, будет тот же эффект. Даже в языке без GC.
наше приложение с gen0 поколением в 6G суммарно паузы меньше 0.140c раз в 20-30с и gen2 в 20+G (с учетом gen0 и gen1 суммарно 32GB)
А именно:
* На момент сборки дампов Garbage Collector был запущен (поначалу я не придал этому внимания);
* Очень большой размер кучи;
* Все 4 потока принадлежат Garbage Collector и съедают 100% CPU.
что позволяет сделать вывод, что уже к этому моменту 15с находимся в gc
что еще раз указывает, на узкое место в виде gc
и как бы это ему помогло? собирать больший объем памяти? расшифруйте пожалуйста.
intellij idea, есть пару багов, алокация за минуту 80-120ГБ памяти (размер в секунду свыше гигабайта), за минуту суммарное время в gc 6s, основное время на копирование кусков памяти с одной точки в другу (просадка на memcpy)Это ни о чем не говорит. Тут зависит от того сколько потоков выделяют память, блокирует ли GC остальные потоки. Если приложение десктопное, то вполне может быть что вся эта операция происходит в одном потоке. Выделил 1гб, GC отработал за 500мс, потом еще выделил итд. У автора другой случай: пока GC чистит выделенную память в одном потоке другой успевает выделить еще. При этом память не освобождается, ибо много живых ссылок присутствует на момент начала сборки.
High CPU или как Garbage Collector может убить производительность