Поскольку Java не предоставляет способа получить адрес объекта, возможно ли закодировать связанный список XOR а>?
Если да, то может кто-нибудь уточнить, как это сделать?
Поскольку Java не предоставляет способа получить адрес объекта, возможно ли закодировать связанный список XOR а>?
Если да, то может кто-нибудь уточнить, как это сделать?
Вы никогда не сможете сделать это в Java.
Даже если вы используете sun.misc.Unsafe
, чтобы получить доступ к реальным адресам объектов, и даже если вы используете сборщик мусора, который не будет перемещать объекты (Concurrent Mark Sweep не не перемещайте объекты, я полагаю, поскольку это «несжатие»), у вас есть более серьезная проблема: искажая ссылки на объекты prev
и next
вместе в целое число, сборщик мусора не поймет, что они являются объектами ссылки. Таким образом, он будет думать, что указанные объекты не имеют ссылок, и, следовательно, соберет все узлы вашего списка как мусор.
Если вам нужно сэкономить память, используйте список на основе массива вместо связанного списка.
Я не верю, что вы можете (по крайней мере, не используя ссылки на объекты для ваших указателей «следующий» и «предыдущий») по причине, которую вы цитируете: адреса объектов официально непрозрачны. Хотя мы могли получить доступ к битам ссылки, JVM может перемещать объекты в памяти (например, при управлении памятью), и хотя я не сразу нахожу спецификацию цитата для него, я считаю, что это разрешено обрабатывать, изменяя значения ссылки на объект (буквально переходя и обновляя каждое поле и т. д., где находится старая ссылка, давая ему новую ссылку). Итак, если мы преобразовали ссылку на объект в long
(например), а затем выполнили XOR с другой ссылкой на объект, преобразованной в long
, если какой-либо объект перемещается (как они могут это сделать), как только любой из них будет XOR обратно и преобразована обратно в ссылку на объект, она может оказаться недействительной.
Следовательно, я думаю, вам нужно будет использовать что-то другое, кроме ссылок на объекты для указателей, таких как индексы в большой массив ссылок на объекты, и в этот момент я вполне уверен, что вы потеряли преимущество памяти связанного списка XOR .