Преимущество сборки мусора заключается в том, что она имитирует машину с бесконечным объемом памяти. Механизм или реализация этой абстракции должны быть полностью прозрачными для вас, как для программиста. Все мы знаем, что этот механизм восстанавливает память, которая больше не используется программой, но на самом деле это не гарантируется. Если вы запустите программу на компьютере с большим объемом оперативной памяти, чем когда-либо фактически используется программой, сборка мусора может никогда не произойти. Опять же, не имеет значения, потому что вы можете просто написать программу, независимо от того, как она использует память. Диспетчер памяти будет просто выделять больше оперативной памяти всякий раз, когда программа запрашивает ее, и вы можете предположить, что такое распределение всегда будет успешным. Java - это язык для сборки мусора, а C ++ - нет. 1
Недостатком сборки мусора является то, что, как и все абстракции , она имеет утечку. Это не всегда работает идеально все время, особенно в крайних случаях, и вы, вероятно, столкнетесь с ошибками. Люди, которые написали алгоритм сборки мусора (тот, который должен быть прозрачным для вас, как программиста), оптимизировали работу для наиболее распространенных случаев, и проблема с общими случаями заключается в том, что они никогда не бывают настолько распространенными. В общем , вы не можете сделать лучше, чем сборщик мусора при управлении памятью. Но в определенных обстоятельствах (и при наличии достаточного количества времени, энергии и понимания) это может быть возможно. C ++ дает вам эту гибкость; Ява не
Все это говорит, я думаю, что стандартный совет по выбору языка применим здесь, возможно, даже больше, в этом случае, учитывая ограничения. Выберите язык, который наиболее известен основным разработчикам проекта. В дополнение к очевидным причинам (например, вы сможете разрабатывать приложение быстрее и эффективнее), это особенноважно в случае, который вы описываете, потому что программирование на C ++ так же, как вы программируете на Java, приведет к ужасно неэффективным практикам управления памятью и, следовательно, к утечкам и сбоям. Аналогично, программирование на Java, как вы программируете на C ++, не принесет вам большой пользы и может привести к тому, что программа будет менее оптимизирована, учитывая, что алгоритмы сборки мусора настроены и настроены для наиболее распространенных случаев. ,
Программисты, которые привыкли работать на языках, собираемых мусором, учатся доверять сборщику мусора, а не бороться с ним. Если вы работаете на языке для сбора мусора, это те программисты, которые вам нужны в вашем проекте. Программисты, которые непривыкшие работать на языке, предназначенном для сбора мусора, скептически относятся к такой абстракции «бесконечной памяти», и часто по множеству веских причин. Как бы ни были хороши эти программисты, это не те, которые вы хотите работать на языке сборки мусора, потому что они будут сражаться с GC на каждом этапе пути, постоянно угадывая его и часто производя медленнее и менее эффективно используя память код, чем другой тип программиста. В лучшем случае, они просто потратят много времени на то, чтобы заново изобрести колесо, что обойдется вам в огромные деньги и даже в долгосрочные затраты на техническое обслуживание.
И тогда вам также нужно спросить себя, действительно ли это имеет значение. В неуместном комментарии Бо есть больше, чем намек на правду: память сейчас настолько дешевая, что вряд ли стоит слишком много загибать руки. Даже если вам нужны огромные суммы, эти суммы уже не так массивны, как 10 лет назад. Программирование и разработка приложений обходятся гораздо дороже, чем покупка больших объемов оперативной памяти и вычислительной мощности. Это не означает, что вы должны избегать экономики, где это возможно, но это также означает, что вы не должны тратить слишком много времени на это.
1 Конечно, это предположение подчеркивает более глубокий недостаток в этом вопросе. Как оказалось, «Java или C ++» - это нечто вроде красной селедки. Стандартная реализация Java обеспечивает сборку мусора, а C ++ не соответствует языковому стандарту, но нет абсолютно никаких причин, по которым вы не можете использовать сторонний сборщик мусора для C ++. Многие компании зарабатывали на жизнь, продавая эти вещи, а некоторые, вероятно, зарабатывали на жизнь, раздавая их бесплатно.