Удаление объектов в Java - PullRequest
       31

Удаление объектов в Java

1 голос
/ 20 ноября 2010

Так что в моей программе у меня есть несколько различных объектов, хранящихся в массиве. Я случайным образом генерирую число, являющееся индексом массива, и клонирую этот объект (девять раз), чтобы создать сетку объектов размером 3х3 на моем экране.

Теперь моя проблема в том, что после того, как у меня есть сетка 3х3, я хочу иметь возможность стереть ее и сгенерировать новую сетку объектов, находящихся в массиве. Проблема в том, что я не могу придумать, как избавиться от всех этих клонов, кроме как просто убрать их с дисплея, что кажется пустой тратой памяти. Я хочу сделать как 400 испытаний, так что к концу будет много клонированных объектов.

Есть ли способ удалить эти клонированные объекты? Мне нужно создавать новые объекты, потому что возможно, что один из объектов в моем массиве будет дважды использоваться в сетке.

Ответы [ 3 ]

2 голосов
/ 20 ноября 2010

Я думаю, что сборщик мусора Java сделает это за вас. Когда на объект никто не ссылается, он будет удален, когда система распознает это; но что вы имеете в виду, когда говорите «убрать их с экрана»? Если они являются «графическим объектом», они должны находиться внутри другого объекта (например, JFrame), поэтому вы должны использовать метод, чтобы указать объекту JFrame (или другому объекту) выбросить ссылку или перезаписать ссылку другой.

0 голосов
/ 20 ноября 2010

Поскольку ссылка все еще остается внутри контейнера.Я думаю, что вы сделали что-то вроде: myJFrameObject.getContentPane.add (object_to_display);поэтому ссылка находится внутри myJFrameObject, и вы можете использовать, например, myJFrameObject.getContentPane.remove.Если вы хотите, вы можете использовать setVisible (false), чтобы скрыть фрейм.Это зависит от ситуации.

0 голосов
/ 20 ноября 2010

Это помогает понять, что вы не имеете дело с реальными объектами, вы имеете дело с указателями или ссылками на объекты в памяти.Итак:

Object obj = new Object();

не объект, а ссылка на объект в памяти.Удалив ссылку, установив для нее значение null или заменив ее ссылкой на другой объект, старый объект удаляется ... иш.Когда запускается сборка мусора, она удаляется.Итак:

obj = null;

и

obj = new Object();

по существу удалят старый объект.То же самое относится к массиву объектов, вы имеете дело не с массивом реальных объектов, а с массивом ссылок на объекты.Таким образом, установив нулевую позицию в массиве или установив позицию для нового объекта, старый объект удаляется.Итак:

ObjArray[4] = null;

и

ObjArray[4] = new Object;

Удалит старый объект.

Редактировать: Что-то, что я забыл упомянуть, один объект в памяти может иметьнесколько ссылок на него, и пока все эти ссылки не будут удалены, объект может быть удален сборщиком мусора.

Object obj = new Object();
ObjArray[4] = obj;
obj=null;

В вышеупомянутом случае первоначально созданный объект будетне удаляется, когда для obj установлено значение null, это связано с тем, что ссылка на него все еще существует в ObjArray.Вы должны установить оба объекта obj и ObjArray [4] в null, прежде чем объект исчезнет.

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