2015-05-08 4 views
2

Я сериализую объект класса связанного списка, определенного пользователем, так как каждый узел этого списка получает ячейку памяти в куче, а десериализует, если ячейка памяти уже занята для определенного узла, напримерСериализация и десериализация связанногоList в java

enter image description here

если память узла 2, т.е. 200 уже занято, то как узел 1 знает об этом, и как список десериализации? Или в java распределение памяти происходит по-разному.

+0

При сериализации вы сохраните состояние объекта где-то в файле, поэтому неважно, где они были расположены в куче. в то время как будет создан новый объект сериализации, который может иметь другое местоположение в куче. – Prashant

ответ

1

Вообще говоря, вам не нужно было бы ничего делать о кучке вручную на Java.

Сериализация не должна обрабатывать кучу, если у вас нет ссылок на сериализованный узел.

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

Надеюсь, этот вопрос вам ответит.

+0

спасибо за ответ, двум узлам не нужно знать, где находится другой узел в памяти, но предыдущий узел должен знать, где следующий узел в противном случае будет проходить связанный список? – zombie

+0

Возможно, он говорит, что два узла в LinkedList (next, prev) связаны не с ячейками памяти, а с идентификатором, когда они сериализованы, то вы фактически не ссылаетесь на ячейку памяти. – exoddus

2

JVM несет ответственность за управление объектом в памяти. После любого GC выполняется, объекты, выделенные в памяти могут быть перемещены, так что LinkedList фактически не указывает фиксированный адрес, но ссылка

Java не имеет pointers, только ссылки на объекты (безопасные референции). Ссылка похожа на указатель, поскольку она указывает на переменную, объект, но вы не можете просматривать или редактировать адресную память этой ссылки (в отличие, например, от C).

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