Вопрос по finalize

207
20 ноября 2017, 17:53

Добрый день, сразу к делу, у меня в приложении куча сцен и каждая сцена - это свой объект, там иерархия своя естественно создано и т.д. Чтобы отовсюду достучаться к этим объектам сделал отдельный класс, в котором хранится по одной ссылке на каждый объект, а ссылка на объект этого класса передаётся каждой сцене. Такое дело, что когда я перехожу к новой сцене, предыдущая мне уже ни к чему и я бы хотел, чтобы они не занимали место в памяти т.к. вместе со всеми полями они могут занимать его достаточно много. Тут я подумал про finalize(). Что если при совершении смены сцен, вызывать этот метод у сменяемой сцены, это поможет?

Answer 1

нет. Все объекты удаляет GC (сборщик мусора), вы можете только удалить ссылки на объекты, и оставить объект GC. Когда память заполниться до определенного предела GC все почистит сам.

Единственное, что могу вам посоветвать, это вызов System.gc() - этим вы попросите сборщика собрать недостижимые объекты.

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

READ ALSO
Не запускается меню “Debug Main” в Android Studio. Что делать?

Не запускается меню “Debug Main” в Android Studio. Что делать?

При запуске меню "Debug Main" в Android Studio 30 выдаёт эту ошибку:

304
Лямбда выражения Java 8 (сортировка String)

Лямбда выражения Java 8 (сортировка String)

В качестве компаратора используйте лямбда-функцию, задающую реализацию методу compare() из интерфейса javautil

216
Ошибка has no zero argument constructor Intent Service

Ошибка has no zero argument constructor Intent Service

Никак не могу понять в чем ошибкаИспользую конструктор без аргумента,но при этом все равно ловлю этот эксепшен

220
Недостаточно места в ArrayList

Недостаточно места в ArrayList

Если при вставке новых элементов в ArrayList, недостаточно места, то новая ёмкость рассчитывается по формуле: (oldCapacity*3)/2+1 С какой целью разработчики...

228