В чем разница в новом заявлении между С++ и JAVA

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


person Jackie    schedule 20.12.2014    source источник
comment
В Java JVM управляет выделенной памятью, а в C++ вы должны управлять ею самостоятельно...   -  person Toppest.Of.Kek    schedule 20.12.2014
comment
Это в основном называется сборкой мусора   -  person Dici    schedule 20.12.2014


Ответы (4)


Java использует сборщик мусора, который автоматически освобождает память для повторного использования.
Подробнее об этом читайте здесь http://javabook.compuware.com/content/memory/how-garbage-collection-works.aspx

person Pratik Singhal    schedule 20.12.2014

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

person Mark A. Ropper    schedule 20.12.2014

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

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

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

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

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

person Peter Lawrey    schedule 20.12.2014

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

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

person Rahul Manne    schedule 20.12.2014