Хорошо, я понимаю, что я должен сравнить свое конкретное приложение и бла-бла-бла, но:
Настройки JVM по умолчанию для -Xmx, сборщика мусора по умолчанию и т.д. являются значениями по умолчанию, которые являются разумными значениями по умолчанию для большинства типичных программ Java, и могут быть не такими подходящими для идиоматического кода Scala (частично потому, что идиоматический Scala будет иметь тенденцию генерировать больше "мусора" ).
Итак, я ищу рекомендации для вариантов. Требуется ли типичная Scala программа с более высоким значением -Xmx? Являются ли определенные JVM лучше для Scala, чем другие? Является ли другой сборщик мусора (-XX: + UseParallelGC vs XX: + UseConcMarkSweepGC), как правило, более безопасным/лучшим/быстрым догадкой/ставкой/значением по умолчанию для Scala, чем обычно используется в Java? Есть ли другие варианты, о которых я должен думать конкретно в отношении кода Scala и каким образом?
Так как генерируются более временные объекты, должно ли больше по умолчанию выделяться больше "молодого" поколения? Или, как правило, молодому поколению требуется меньше пространства для более частого сбора мусора? Как насчет других поколений?
Конечно, мне все равно нужно настроить эти вещи для моего конкретного приложения, но, как правило, я предполагаю, что для типичной программы Scala моя стартовая точка может отличаться от той, что есть на Java.
Я действительно сталкиваюсь с ошибками памяти и "ограниченным верхним пределом GC" в некоторых конкретных приложениях, или просто с помощью приложения тратят слишком много времени на паузы в сборке мусора. В какой-то степени я могу обойти эти проблемы, изменив параметры, но я хотел бы услышать о других опытах, общих принципах и отправных точках.