Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемРоман Грязев
1 Язык программирования Java Дмитриев Андрей Владиславович
2 Сборка мусора java.lang.ref Доступность объектов Ссылки System.gc() Finalizer
3 Введение void initFrame(){ Frame f = new Frame(A test); … //дальнейшая работа с окном } //завершение метода без явного удаления объекта: локальный объект становится недоступным. Сборщик мусора отслеживает все такие объекты и удаляет их
4 Особенности сборщика мусора Существует несколько основных методологий сборки мусора(поколения, инкрементация) Нет гарантированных механизмов управления Нет гарантий вызова Точное время вызова непредсказуемо Гарантированно должен работать только при недостатке памяти
5 Обзор java.lang.ref Содержит классы для обеспечения гибкого взаимодействия со сборщиком мусора Reference – абстрактный базовый класс –WeakReference –SoftReference –PhantomReference
6 Доступность объектов
7 Типы ссылок(сильная) Frame f = new Frame(A test); f = null; //очистка ссылки До тех пор пока переменная f существует, не равна null, или находится в области видимости, объект считается доступным
8 Типы ссылок(слабая) WeakReference wr = new WeakReference(new Frame(A test)); Жесткая ссылка на объект может быть восстановлена методом get() Если возвращаемое значение – null значит, что сборщик мусора финализировал данный объект Удаление слабо доступного объекта может не произойти в первый раз, когда GC его обнаружил Наличие слабой ссылки на объект не препятствует его удалению
9 Типы ссылок(мягкая) Значение доступно по методу get(). Если возвращаемое значение – null значит, что сборщик мусора финализировал данный объект Наличие слабой ссылки на объект не препятствует его удалению Финализация, как правило, происходит при недостатке памяти Обычно используется для создания кэшей SoftReference sr = new SoftReference(new Frame(A test));
10 Типы ссылок(призрачная) Объект не подлежит восстановлению Используется для выполнения завершающих действий после удаления объекта Создается в связке с ReferenceQueue Метод get() всегда возвращает null PhantomReference pr = new PhantomReference(new Frame(A test), referenceQueue);
11 ReferenceQueue Это очередь ссылок на объекты, которые недоступны по жесткой ссылке Имеет методы: –poll() – чтение объекта из очереди, если таковой есть –remove()/remove(long timeout) – удаление объекта из очереди, если таковой есть
12 ReferenceQueue(пример) ReferenceQueue refQueue = NativeImage3.referenceQueue(); while (true) { NativeImage3 nativeImg = (NativeImage3) refQueue.remove(); nativeImg.dispose(); }
13 Метод Object.finalize() Каждый объект может переопределять метод, вызываемый перед удалением объекта из памяти Обычно используется для освобождения native ресурсов Нет гарантий относительно времени выполнения
14 finalize() (пример) class MyObject { protected void finalize() throws Throwable { System.out.println(this:"+this); }
15 System.gc() Указывает VM о желательности сборки мусора Не гарантирует начала работы GC Не рекомендуется для использования
16 Пример удержания ссылки MyObject obj = new MyObject(); ReferenceQueue rq = new ReferenceQueue(); WeakReference wr = new WeakReference(obj, rq); System.out.println("Poll: "+ rq.poll()); //вернет null System.gc();//можно повторить в цикле System.out.println("Poll: "+ rq.poll()); //вернет null System.out.println(Referent:"+wr.get());
17 Освобождение жесткой ссылки obj = null; System.gc(); System.out.println("Poll: "+ rq.poll()); //вернет obj System.out.println(Referent:"+wr.get()); //вернет null
18 Правда ли что… Сборка мусора может вносить непредвиденные задержки в работу программы Слабо(Weak) доступный объект можно восстановить (породить на него жесткую ссылку) У программиста нет механизмов воздействия на сборщик мусора
19 Сборка мусора Дмитриев Андрей Владиславович
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.