2011-01-24 3 views
7

Есть ли что-нибудь в строках интеллектуальных указателей C++ в Java?Есть ли в Java «умные указатели»?

+0

Я думаю, вы можете что-то ввести в заблуждение. Умные указатели представляют собой оболочку вокруг исходных указателей, которые обеспечивают, например, проверка ссылок или границ. Java не имеет исходных указателей и имеет встроенный GC. – delnan

+0

См. Объяснение Википедии для интеллектуальных указателей для получения дополнительной информации: http://en.wikipedia.org/wiki/Smart_pointer –

+1

Сама реализация языка (JVM) берет на себя большинство (если не все), которые обычно обрабатываются интеллектуальными указателями на C++. –

ответ

12

Все указатели Java (ссылки) являются интеллектуальными указателями.

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

Ссылки на Java немного отличаются от ссылок на указатели. Java абстрагирует все значения указателя и математику, которые вы видите на C++. Таким образом, в любое время, когда вы создаете новый объект и храните его в переменной, вы храните его в Java-версии «умного указателя».

+1

Возможно, вы захотите подробно рассказать о том, какая разница между ссылками Java и умными указателями на C++. – Pacerier

+0

умные указатели дают разработчику контроль, когда освобождаются и деструктор вызывается. Для программирования с низкой задержкой они устраняют «дрожания» во время ответа, которые являются общими для Java. auto pointers делают это тоже, и один лучше - путем помещения фактического объекта в стек, а не в любую часть кучи, они обеспечивают лучшую локальность. Обе функции, о которых я сожалею, недоступны в Java. –

3

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

+0

@ pablo-tx .. так только сборщики мусора помогают в управлении памятью? – garima

+2

Это не совсем так: объект в java ** является ** указателем на реальный ресурс. –

+0

@garima: не уверен, что я понимаю вас, но ДА: сборщики мусора помогают в управлении памятью. –

5

Да и нет. Нет, в Java нет ничего похожего на объект-указатель. Да в том смысле, что каждый объект является «умным указателем», что означает, что он подвергается сбору мусора и заботится о его собственной жизни, если можно так выразиться.

6

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

Ближайшие совпадения, которые приходят на ум, - это java.lang.ref.WeakReference и java.lang.ref.SoftReference, поскольку они позволяют в некоторой степени настроить сборку мусора.

Смежные вопросы