Как получить доступ к памяти в Java? - PullRequest
3 голосов
/ 29 апреля 2010

Возможно ли, что мы можем получить доступ к памяти в Java прямо или косвенно?

Если мы попытаемся напечатать объект, он напечатает хеш-код. Имеет ли хэш-код косвенное значение в ячейке памяти?

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

-Abhishek

Ответы [ 4 ]

12 голосов
/ 29 апреля 2010

Возможно ли, что мы можем получить доступ расположение памяти в Java напрямую или косвенно?

номер

7 голосов
/ 29 апреля 2010

Нет, хеш-код, вообще, не имеет ничего общего с расположением памяти. Место в памяти вашего объекта - это ссылка на сам объект.

Однако, это не может быть совершенно невозможно выжать из фактического местоположения. Хеш-код Java Object, согласно его javadoc, обычно реализуется путем преобразования внутреннего адреса объекта в целое число, но этот метод реализации не требуется языком программирования Java. И есть * Метод 1006 *, который возвращает тот же хеш-код для данного объекта, который будет возвращен методом hashCode () по умолчанию (то есть hashCode () Object). Таким образом, таким образом вы действительно сможете получить фактическое расположение памяти. Но то, как это работает, зависит от реализации. И поскольку вы определенно не сможете напрямую читать / писать в памяти, даже если вы знали местоположение, что вы будете делать с этой информацией?

2 голосов
/ 29 апреля 2010

Вы можете читать / записывать адреса памяти, если для этого предусмотрен API. На Sun / Oracle JRE sun.misc.Unsafe позволяет вам сделать это, хотя намеренно вам нужно пройти через обручи, чтобы заполучить экземпляр.

2 голосов
/ 29 апреля 2010

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

Хотя это бессмысленно. Из-за сборки мусора любой объект Java может быть перемещен в память в любое время, когда любой поток создает новый объект

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