В C++, когда new используется в присваивании, это называется динамическим выделением памяти, что означает, что вы должны вручную использовать оператор delete[], чтобы вернуть память после. Но в Java нам не нужно использовать удаление в конце. Означает ли это, что Java автоматически возвращает память после использования?
Вопрос
В чем разница в новом заявлении между С++ и JAVA
- В Java JVM управляет выделенной памятью, а в C++ вы должны управлять ею самостоятельно... Toppest.Of.Kek 20.12.2014
- Это в основном называется сборкой мусора Dici 20.12.2014
Ответы
Ответ 1 · Pratik Singhal
Java использует сборщик мусора, который автоматически освобождает память для повторного использования.
Подробнее об этом читайте здесь http://javabook.compuware.com/content/memory/how-garbage-collection-works.aspx
Ответ 2 · Mark A. Ropper
Одним из больших различий между C++ и Java является сборка мусора система, которая обрабатывает выделение и освобождение памяти. В С++, если вы не удаляете объекты, вы можете вызвать утечку памяти, которая делает память непригодной для использования, но Java устраняет эту проблему.
Ответ 3 · Peter Lawrey
Java и C++ не так уж отличаются, как может показаться на первый взгляд. Вы можете выполнять ручное или автоматическое управление памятью на любом языке.
В C++ ваша программа знает о жизненном цикле объекта и отвечает за освобождение памяти, когда она больше не используется. Это не означает, что это должно быть сделано вручную, это просто означает, что когда память освобождается, она сразу становится доступной.
В C++ вы можете иметь автоматическое управление ресурсами и даже сборку мусора, хотя язык не требует этого.
В Java это гораздо более косвенно, и почти никогда не нужно очищать ресурсы или участвовать в их освобождении. Единственный раз, когда вам нужно это сделать, это когда ваш объект является прокси для более дорогого ресурса, такого как файл, сокет, соединение с базой данных или память вне кучи.
В Java управление памятью и сборка мусора требуются спецификацией языка Java, и вы можете предположить, что это будет доступно без дополнительных библиотек или работы с вашей стороны.
Ответ 4 · Rahul Manne
Когда в задании используется new, это не одно и то же между C++ и Java. В Java вам дается ссылочный идентификатор, который можно найти, чтобы получить адрес памяти, который вы затем можете использовать для изменения данных по этому адресу памяти. В Java есть сборщик мусора, который запускается всякий раз, когда считает это целесообразным (низкая загрузка ЦП, много "мусорной" памяти), и он проходит через таблицу ссылок, освобождает всю память и удаляет все ссылки, которые больше не используются. по вашей программе.
С другой стороны, C++ напрямую возвращает адрес памяти. Нет сборщика мусора, который автоматически освобождает данные. delete требуется для непосредственного освобождения данных без какой-либо промежуточной справочной таблицы.
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Глядя на окончательный ответ до 2 знаков после запятой С++
- Область действия члена данных статического класса
- Прерывание указателя strcpy char
- Использовать асинхронный вызов - это то же самое, что использовать синхронный вызов в потоке?
- Почему GWT все еще актуален?
- Как запустить Java-программу в Eclipse ?