В университете нам дали следующий пример кода, и нам сказали, что при запуске этого кода произошла утечка памяти. Пример должен продемонстрировать, что это ситуация, когда сборщик мусора не может работать.
Что касается моего объектно-ориентированного программирования, единственная кодовая строка, способная вызвать утечку памяти, будет
items=Arrays.copyOf(items,2 * size+1);
Документация гласит, что элементы скопированы. Означает ли это, что ссылка копируется (и, следовательно, создается другая запись в куче), или сам объект копируется? Насколько я знаю, Object и, следовательно, Object [] реализованы как ссылочный тип. Таким образом, присвоение нового значения «items» позволит сборщику мусора обнаружить, что на старый «item» больше нет ссылок и, следовательно, его можно собрать.
На мой взгляд, этот пример кода не вызывает утечку памяти. Может ли кто-нибудь доказать, что я не прав? =)
import java.util.Arrays;
public class Foo
{
private Object[] items;
private int size=0;
private static final int ISIZE=10;
public Foo()
{
items= new Object[ISIZE];
}
public void push(final Object o){
checkSize();
items[size++]=o;
}
public Object pop(){
if (size==0)
throw new ///...
return items[--size];
}
private void checkSize(){
if (items.length==size){
items=Arrays.copyOf(items,2 * size+1);
}
}
}