В качестве неотвеченного ответа (существующих ответов более чем достаточно), вы можете обратиться к техническому документу о системе сбора мусора JVM, если вы вообще заинтересованы в GC. (Любой, только Google JVM Сборка мусора)
Я был поражен некоторыми из используемых техник, и, читая некоторые концепции, такие как «Eden», я впервые осознал, что Java и JVM действительно могут превосходить C / C ++ по скорости. (Всякий раз, когда C / C ++ освобождает объект / блок памяти, включается код ... Когда Java освобождает объект, он вообще ничего не делает; так как в хорошем ОО-коде большинство объектов создаются и освобождаются практически сразу, это удивительно эффективно.)
Современные GC, как правило, очень эффективны, управляют более старыми объектами, значительно отличающимися от новых объектов, способны контролировать GC, быть короткими и недолговечными или длинными и тщательными, а многими параметрами GC можно управлять с помощью переключателей командной строки. так что на самом деле полезно знать, к чему на самом деле относятся все термины.
Примечание: я только что понял, что это вводит в заблуждение. Распределение STACK в C ++ очень быстрое - моя точка зрения заключалась в том, чтобы выделить объекты, которые могут существовать после завершения текущей подпрограммы (я считаю, что это ДОЛЖНЫ быть все объекты - это то, о чем вам не нужно думать, если вы собираетесь думаю в ОО, но в С ++ скорость может сделать это непрактичным).
Если вы размещаете только классы C ++ в стеке, это будет распределение по крайней мере так же быстро, как и в Java.