Есть ли что-то вроде malloc/free на java?

Я никогда не видел таких утверждений, хотя, он существует в мире java вообще?

5 ответов


версия Java malloc is new -- он создает новый объект указанного типа.

в Java память управляется для вас, поэтому вы не можете явно delete или free объект.


Java имеет сборщик мусора. Вот почему вы никогда не видите таких утверждений в своем коде (что приятно, если вы спросите меня)

в информатике, мусор сбор (GC) является формой автоматического управление памятью. Это особенный случай управления ресурсами, в котором управляемый ограниченный ресурс память. Сборщик мусора, или просто коллектор, попытки вернуть мусор или память, занятая объектами которые больше не используются программа. Вывоз мусора изобретен Джоном Маккарти около 1959 года решать задачи в Lisp.


в Java нет прямых эквивалентов:

C malloc создает нетипизированный узел кучи и возвращает указатель на него, который позволяет получить доступ к памяти, как вы хотите.

Java не имеет понятия нетипизированного объекта и не позволяет напрямую обращаться к памяти. Самое близкое, что вы можете получить в Java к malloc будет new byte[size], но это возвращает вам строго типизированный объект, который вы можете использовать только как массив байтов.

C free освобождает узел кучи.

Java не позволяет явно освобождать объекты. Освобождение объекта в Java полностью находится в руках сборщика мусора. В некоторых случаях вы можете влиять на поведение GC; например, назначая null к ссылочной переменной и вызов System.gc(). Однако это не приводит к освобождению объекта ... и это очень дорогой способ действовать.


Если вы не до хорошего (tm), я полагаю, вы можете получить доступ к необработанной памяти, хотя интерфейс JNI. Здесь вы можете вызывать c-программы из Java-программ. Конечно, вы должны работать в среде, где ваша программа имеет права на это (браузер обычно не разрешает это, если это не самоубийственно), но вы можете получить доступ к объектам через указатели C.

Мне интересно, откуда исходит первоначальный вопрос. В какой-то момент давным-давно я был полностью скептически относясь к идее, что управление памятью в стиле С и указатели в стиле с не нужны, но на данный момент я истинно верю.


new вместо malloc сборщик мусора, а не бесплатно.