Ответ 1
Go не имеет бесплатной сборки мусора. Если вы можете указать, где эти претензии, я хотел бы попытаться исправить их.
Одно из преимуществ, которое, по нашему мнению, принадлежит Go, - это то, что он дает вам больше контроля над макетом памяти. Например, простой 2D-графический пакет может определить:
type Rect struct {
Min Point
Max Point
}
type Point struct {
X int
Y int
}
В Go, Rect - всего четыре целых числа, смежные в памяти. Вы все равно можете передать & r.Max для функции, ожидающей точку * Point, которая является указателем на середину переменной Rect r.
В Java эквивалентное выражение будет состоять из классов Rect и Point, и в этом случае поля Min и Max в Rect будут указателями на отдельно выделенные объекты. Это требует большего количества выделенных объектов, занимающих больше памяти и предоставления сборщику мусора больше отслеживать и больше делать. С другой стороны, он всегда избегает создания указателя на середину объекта.
По сравнению с Java, тогда Go дает программисту больше контроля над макетом памяти, и вы можете использовать этот элемент управления для уменьшения нагрузки на сборщик мусора. Это может быть очень важно в программах с большими объемами данных. Управление макетом памяти также может быть важным для извлечения производительности из оборудования из-за эффектов кеша и т.д., Но тангенциального к исходному вопросу.
Коллекционер в текущих распределениях Go является разумным, но ни в коем случае не является современным. У нас есть планы потратить больше усилий, чтобы улучшить его в ближайшие год-два. Чтобы быть ясным, Go сборщик мусора, конечно, не так хорош, как современные сборщики мусора Java, но мы считаем, что проще начать писать программы, для которых не требуется столько сбора мусора, поэтому чистый эффект все равно может быть таким, что сбор мусора меньше проблемы в программе Go, чем в эквивалентной программе Java.