2014-12-20 1 views
0

В C++, когда в присваивании используется new, это называется распределением динамической памяти, что означает, что вам нужно вручную использовать инструкцию delete [], чтобы вернуть память назад. Но в Java мы не должны использовать delete в конце. Означает ли это, что Java автоматически возвращает память после использования?В чем разница в новой инструкции между C++ и JAVA

+0

В Java JVM управляет выделенной памятью, в то время как на C++ вы должны управлять ею самостоятельно ... –

+0

Это в основном называется сборкой мусора – Dici

ответ

0

Одним из больших различий между C++ и Java является Garbage Collection система Java, которая управляет распределением памяти и открепление. В C++, если вы не удаляете объекты, вы можете вызвать утечку памяти, которая оставляет память непригодной для использования, но Java устраняет эту проблему.

0

Java и C++ не такие разные, как в первый раз. Вы можете выполнять ручное или автоматическое управление памятью на любом языке.

В C++ ваша программа осознает жизненный цикл объекта и отвечает за освобождение памяти, когда она больше не используется. Это не означает, что он должен быть ручным, это просто означает, что когда память была выпущена, она сразу же доступна.

В C++ вы можете иметь автоматическое управление ресурсами и даже сборку мусора, хотя на этом языке нет требования к этому языку.

В Java это гораздо более косвенное и почти никогда не нужно очищать ресурсы или участвовать в их освобождении. Единственный раз, когда вам нужно это сделать, - это когда ваш объект является прокси-сервером для более дорогого ресурса, такого как файл, сокет, соединение с базой данных или память кучи.

В Java, управление памятью и сборка мусора требуется спецификацией Java Language Specification, и вы можете предположить, что это будет доступно без дополнительных библиотек или для работы с вашей стороны.

0

Когда новый используется в задании, это не то же самое между C++ и Java. В Java вам предоставляется ссылочный идентификатор, который можно найти, чтобы получить адрес памяти, который затем можно использовать для изменения данных по этому адресу памяти. У Java есть сборщик мусора, который работает, когда он считает нужным (низкое использование ЦП, большая память «мусора»), и он проходит через справочную таблицу и освобождает всю память и удаляет все ссылки, которые больше не используются вашей программой.

С другой стороны, C++ возвращает адрес памяти напрямую. Нет сборщика мусора, который автоматически освобождает данные. удаление требуется для бесплатного удаления данных без какой-либо промежуточной справочной таблицы.

Смежные вопросы