> -- Info21 писал(а):
> Поясните, пожалуйста.
И сам язык располагает и программисты на нём привыкли сорить памятью.

Язык не позволяет использовать локальные объекты и массивы, которые можно выделять на стеке, оставляя эту оптимизацию на сложный транслятор. Но поскольку программист не осознаёт в явном виде разницу, то он легко блокирует возможность использования объектов на стеке даже для сложного транслятора.

Наглядный пример из языка:
## Код:
```
Point [128][128] points;
```

Это двумерный массив точек. При необходимости, в нормальных языках его можно представить как один объект, который даже может быть выделен статически. В Java - это (1 + 128 + 128 * 128) динамически выделенных объектов. Тут не только проигрыш в сборке освобождённой памяти, но и на выделение тратится куда больше времени.

Про программистов - это отдельная песня. Недавно говорил с коллегой, для которого основная специализация - это Verilog, но также у него есть хобби-проект для Android. Он искал хорошее решение для создания неизменяемых объектов с большим количеством параметров, что при решении в лоб приводит к длинному списку аргументов у конструктора. На просторах интернета он нашёл решение - для создания неизменяемого объекта создаётся один изменяемый, после установки полей которого, вызывается метод создания искомого. Типичное производство мусора в Java.