Я думаю, что «Использовать изменяемые объекты только там, где это уместно» лучше, чем «Сделать ваши объекты неизменяемыми».Многие приложения с очень низкой задержкой имеют пулы объектов, которые они повторно используют для минимизации GC.Неизменяемые объекты не могут быть использованы таким образом.Например, если у вас есть класс Location:
class Location {
double lat;
double lon;
}
Вы можете создавать некоторые при загрузке и использовать их снова и снова, чтобы они никогда не вызывали выделения и последующий сборщик мусора.
Этот подход намного сложнее, чем использование неизменяемого объекта определения местоположения, поэтому его следует использовать только там, где это необходимо.