Тип ссылки JVM - PullRequest
       17

Тип ссылки JVM

4 голосов
/ 22 января 2011

В некоторой литературе по Java утверждение

Тип ссылки виртуальной машины Java - хитро именованная ссылка

широко распространено.Однако авторы, как правило, не объясняют больше, почему такое утверждение является действительным.Еще одна вещь, которая заставила бы меня понять это больше:

Что означает ссылочный тип JVM?Представляет ли JVM себя в куче?

Буду признателен за объяснение этого утверждения.

Спасибо,

Ashmawy

Ответы [ 4 ]

10 голосов
/ 22 января 2011

Слово, которое вы ищете здесь: ирония :

использование слов для передачи значения, противоположного его буквальному значению

Использование слова «умный» в этом предложении явно иронично. "Ссылочный тип виртуальной машины Java дается явно действительно тупо очевидным имя 'ссылка'" - это еще один способ прочитать это предложение.

5 голосов
/ 22 января 2011

Я думаю, что часть cleverly относится к тому факту, что ссылочный тип обычно называется pointer, что заставляет читателя выучить два термина.В терминологии JVM для этого просто используется термин reference.

Существует также исторический контекст.

Когда была представлена ​​Java, ее крупнейшим конкурентом был C ++.Главная проблема C ++ заключалась в том, что это было сочтено слишком сложным.Изначально Java позиционировала себя как легкую альтернативу C ++.У него был синтаксис, очень близкий к C ++, но все сложные вещи (перегрузка операторов, шаблоны, множественные механизмы передачи) и т. Д. Были удалены из языка.

И вот теперь подвох ...

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

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

Это привело к многочисленным дискуссиям и вызвало много путаницы, особенно потому, что в C ++ уже использовался термин «ссылка» и он используетсядля чего-то другого (хотя концептуально немного связанного).Дискуссия обычно сосредоточена вокруг двух лагерей, где один из них утверждает, что в Java действительно нет указателей, так как вы не можете выполнять арифметику с ними, и они не представляют непосредственно адреса памяти, в то время как другие лагеря утверждают, что у вас нетуметь делать арифметику с указателем, чтобы называть его указателем.

Иными словами, было ли умным использовать термин reference, все еще открыт для обсуждения.

0 голосов
/ 22 января 2011

Или, может быть, это всего лишь идея выразить другой подход, использованный дизайнерами JVM для управления памятью.

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

Разработчики Java отняли эту свободу у разработчиков.Вы просто не можете создавать объекты в локальном стеке, только в глобальной куче.Таким образом, каждая переменная типа Class / Interface / Array действительно является ссылкой на некоторый адрес памяти в куче.И вы не можете передавать объект по значению только по ссылке.

Если у вас нет выбора - тогда вам даже не нужно думать о том, какой у вас тип переменной - тип значения или ссылочный тип.

0 голосов
/ 22 января 2011

Это становится понятнее, когда весь абзац рассматривается в контексте:

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

(взято из http://javadeveloper -jayaprakash-m.blogspot.com / )

Я бы предположил из этого, что «умно названный» бит относится к тому факту, что ссылки бывают трех разных типов, и JVM может различать каждый из них.

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