Я удивлен тем, что вытекает из этой дискуссии (ну, не совсем, но риторически). Позвольте мне кое-что добавить, даже если я опоздаю.
Виртуальные машины (VM) и сборщик мусора (GC) имеют десятилетия и две отдельные концепции . Существуют языки, скомпилированные с помощью сборщика мусора, даже эти десятилетия (канонический пример: ANSI Common Lisp ; ну, по крайней мере, время компиляции сборщик мусора декларативный язык, Меркурий - но, очевидно, массы кричат на прологоподобные языки).
Внезапно виртуальные машины на основе байт-кода GCed стали панацеей от всех болезней ИТ. Песочница для существующих двоичных файлов (другие примеры здесь , здесь и здесь )? Принцип наименьших полномочий (POLA) / Безопасность на основе возможностей ? Тонкие двоичные файлы (или его современный вариант SafeTSA )? Вывод региона ? Нет, сэр: Microsoft & Sun не разрешает нам даже думать о таких извращениях. Нет, лучше переписать весь наш программный стек для этого замечательного (???) нового (???) языка§ / API. Как говорит один из наших хозяев, это Огонь и движение снова и снова.
§ Не будь глупым: я знаю, что C # - не единственный язык, нацеленный на .Net / Mono, это гипербола .
Редактировать: особенно поучительно посмотреть комментарии к этому ответу С.Лотта в свете альтернативных методов управления памятью / безопасности / мобильности кода, на которые я указал .
Моя точка зрения заключается в том, что неопытным людям не нужно беспокоиться о технических деталях на этом уровне детализации.
С другой стороны, если они впечатлены маркетингом Microsoft / Sun, необходимо объяснить им, что их обманывают - виртуальные машины на основе байт-кода GCed - не новинка, как они утверждают, они не решают магически все Существуют ИТ-проблемы и альтернативы этим методам реализации (некоторые из них лучше).
Редактировать 2: Сборка мусора - это метод управления памятью, и, как и любой метод реализации, необходимо понимать, что он должен использоваться правильно. Посмотрите, как в ITA Software они обходят GC, чтобы получить хорошую производительность :
4 - Поскольку у нас есть около 2 гигабайт статических данных, к которым нам нужен быстрый доступ,
мы используем код C ++ для отображения огромной памяти
файлы, содержащие структуры без указателя C
(рейсов, тарифов и т. д.), а затем
получить доступ к ним из Common Lisp, используя
доступ к внешним данным. Поле структуры
доступ компилируется в два или три
инструкции, так что на самом деле не
любое исполнение. штраф за доступ
С, а не Лисп объектов. При выполнении
это, мы храним мусор на Лиспе
Коллектор от просмотра данных (для
Лисп, каждый указатель на объект C
просто фикснум, хотя мы часто
временно обернуть эти указатели в
Лисп объекты для улучшения
debuggability). Наши изображения на Лиспе
поэтому только около 250 мегабайт
«рабочие» структуры данных и код.
...
9 - Мы можем выполнить вычисления Lisp за 10 секунд на частоте 800 МГц и минусов
менее 5 КБ данных. Это потому что
мы предварительно распределяем все структуры данных, которые мы
нужно и умереть на запросах, которые превышают
их. Это может сделать много Лисп
программисты съеживаются, но с 250 мег
изображения и ограничения в реальном времени, мы
не может позволить себе генерировать мусор . За
Например, вместо того, чтобы использовать минусы, мы
используйте «минусы!», который захватывает клетки из
массив из 1000000 клеток мы
предварительно выделен и который сбрасывается
каждый запрос.
Редактировать 3: (во избежание недоразумений) GC лучше, чем возиться с указателями? В большинстве случаев, конечно, но есть альтернативы и . Нужно ли беспокоить пользователей этими подробностями? Я не вижу никаких доказательств того, что это так, кроме того, чтобы развеять рекламную шумиху, когда это необходимо.