Есть ли что-то вроде malloc / free в Java? - PullRequest
7 голосов
/ 10 декабря 2010

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

Ответы [ 5 ]

14 голосов
/ 10 декабря 2010

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

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

4 голосов
/ 10 декабря 2010

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

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

3 голосов
/ 10 декабря 2010

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

Я удивляюсь, откуда исходит исходный вопрос. Когда-то давно я полностью сомневался в том, что управление памятью в стиле C и указатели в стиле C не нужны, но на данный момент я верный сторонник.

3 голосов
/ 10 декабря 2010

Прямых эквивалентов в Java не существует:

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

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

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

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

0 голосов
/ 10 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...