В C++, когда new используется в присваивании, это называется динамическим выделением памяти, что означает, что вы должны вручную использовать оператор delete[], чтобы вернуть память после. Но в Java нам не нужно использовать удаление в конце. Означает ли это, что Java автоматически возвращает память после использования?
В чем разница в новом заявлении между С++ и JAVA
Ответы (4)
Java использует сборщик мусора, который автоматически освобождает память для повторного использования.
Подробнее об этом читайте здесь http://javabook.compuware.com/content/memory/how-garbage-collection-works.aspx
Одним из больших различий между C++ и Java является сборка мусора система, которая обрабатывает выделение и освобождение памяти. В С++, если вы не удаляете объекты, вы можете вызвать утечку памяти, которая делает память непригодной для использования, но Java устраняет эту проблему.
Java и C++ не так уж отличаются, как может показаться на первый взгляд. Вы можете выполнять ручное или автоматическое управление памятью на любом языке.
В C++ ваша программа знает о жизненном цикле объекта и отвечает за освобождение памяти, когда она больше не используется. Это не означает, что это должно быть сделано вручную, это просто означает, что когда память освобождается, она сразу становится доступной.
В C++ вы можете иметь автоматическое управление ресурсами и даже сборку мусора, хотя язык не требует этого.
В Java это гораздо более косвенно, и почти никогда не нужно очищать ресурсы или участвовать в их освобождении. Единственный раз, когда вам нужно это сделать, это когда ваш объект является прокси для более дорогого ресурса, такого как файл, сокет, соединение с базой данных или память вне кучи.
В Java управление памятью и сборка мусора требуются спецификацией языка Java, и вы можете предположить, что это будет доступно без дополнительных библиотек или работы с вашей стороны.
Когда в задании используется new, это не одно и то же между C++ и Java. В Java вам дается ссылочный идентификатор, который можно найти, чтобы получить адрес памяти, который вы затем можете использовать для изменения данных по этому адресу памяти. В Java есть сборщик мусора, который запускается всякий раз, когда считает это целесообразным (низкая загрузка ЦП, много «мусорной» памяти), и он проходит через таблицу ссылок, освобождает всю память и удаляет все ссылки, которые больше не используются. по вашей программе.
С другой стороны, C++ напрямую возвращает адрес памяти. Нет сборщика мусора, который автоматически освобождает данные. delete требуется для непосредственного освобождения данных без какой-либо промежуточной справочной таблицы.