управление памятью Java - PullRequest
       3

управление памятью Java

1 голос
/ 19 апреля 2010

у меня есть следующий снимок кода:

public void getResults( String expression, String collection ){
 ReferenceList list;
 Vector <ReferenceList> lists = new <ReferenceList> Vector();

 list = invertedIndex.get( 1 )//invertedIndex is class member

 lists.add(list);
}

когда метод будет завершен, я предполагаю, что локальные объекты (списки, списки) «уничтожены».Можете ли вы сказать, освобождается ли память, занимаемая списком, хранящимся в invertedIndex?Или Java выделяет новую память для списка при назначении list = invertedIndex.get (1);

Ответы [ 2 ]

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

Думайте о list и lists как о ссылках на объекты, а не на сами объекты, при разработке управления памятью.

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

Внутри метода вы создаете вектор и используете lists для ссылки на него. Вы также называете часть объекта в invertedIndex с помощью list.

После вызова метода два имени выходят из области видимости. Созданный вектор не имеет другой ссылки, поэтому он доступен для сборки мусора. Однако объект, на который ссылается list, по-прежнему косвенно ссылается на invertedIndex, поэтому он не доступен для сборки мусора.

Надеюсь, это поможет.

1 голос
/ 19 апреля 2010

Да, после возврата метода, lists будет помечен для сборки мусора.

list и invertedIndex не будут затронуты, если только операция get не является разрушительной (т.е. она удаляет list из себя и возвращает ее).

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