Язык программирования Java Дмитриев Андрей Владиславович andrei-dmitriev@yandex.ru.

Презентация:



Advertisements
Похожие презентации
Время жизни объектов Лекция 12. При запуске exe файла Windows анализирует заголовок exe файла для определения разрядности адресного пространства 32 или.
Advertisements

Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Переменные и операторы УРОК 2. Переменные ПЕРЕМЕННАЯ – ?... контейнер для хранения данных. Переменная имеет имя – это….? последовательность букв, цифр.
Сборка мусора Карпов В.Э.. 2 Определение Сборка мусора (garbage collection) одна из форм автоматического управления памятью. Специальный код, называемый.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Лекция 2 Наследование Наследование в Java имеет тот же смысл, что и в С++. Однако наследование в Java осуществляется при помощи ключевого слова extends.
Высокоуровневые методы информатики и программирования Лекция 10 События.
Особенности C# Индексаторы, события, частичные методы, расширяющие методы, сборщик мусора DraggonZ.
Схемы состояний Практика 6. Задача 1 После создания статья Paper является черновиком Draft. После отправки sent статья рассматривается программным комитетом.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Интерфейсы Лекция 4. Реализуйте очередь в виде списка, содержащую комплексные числа Реализуйте методы void Enqueue(Complex с ) – помещает число в очередь.
Сложные структуры данных Связные списки. Структуры, ссылающиеся на себя struct node { int x; struct node *next; };
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Множественное наследование class A {... }; class B {... }; class C : public A, protected B {... }; !!! Спецификатор доступа распространяется только на.
Язык программирования Java Андрей Дмитриев ©2009.
Транксрипт:

Язык программирования Java Дмитриев Андрей Владиславович

Сборка мусора java.lang.ref Доступность объектов Ссылки System.gc() Finalizer

Введение void initFrame(){ Frame f = new Frame(A test); … //дальнейшая работа с окном } //завершение метода без явного удаления объекта: локальный объект становится недоступным. Сборщик мусора отслеживает все такие объекты и удаляет их

Особенности сборщика мусора Существует несколько основных методологий сборки мусора(поколения, инкрементация) Нет гарантированных механизмов управления Нет гарантий вызова Точное время вызова непредсказуемо Гарантированно должен работать только при недостатке памяти

Обзор java.lang.ref Содержит классы для обеспечения гибкого взаимодействия со сборщиком мусора Reference – абстрактный базовый класс –WeakReference –SoftReference –PhantomReference

Доступность объектов

Типы ссылок(сильная) Frame f = new Frame(A test); f = null; //очистка ссылки До тех пор пока переменная f существует, не равна null, или находится в области видимости, объект считается доступным

Типы ссылок(слабая) WeakReference wr = new WeakReference(new Frame(A test)); Жесткая ссылка на объект может быть восстановлена методом get() Если возвращаемое значение – null значит, что сборщик мусора финализировал данный объект Удаление слабо доступного объекта может не произойти в первый раз, когда GC его обнаружил Наличие слабой ссылки на объект не препятствует его удалению

Типы ссылок(мягкая) Значение доступно по методу get(). Если возвращаемое значение – null значит, что сборщик мусора финализировал данный объект Наличие слабой ссылки на объект не препятствует его удалению Финализация, как правило, происходит при недостатке памяти Обычно используется для создания кэшей SoftReference sr = new SoftReference(new Frame(A test));

Типы ссылок(призрачная) Объект не подлежит восстановлению Используется для выполнения завершающих действий после удаления объекта Создается в связке с ReferenceQueue Метод get() всегда возвращает null PhantomReference pr = new PhantomReference(new Frame(A test), referenceQueue);

ReferenceQueue Это очередь ссылок на объекты, которые недоступны по жесткой ссылке Имеет методы: –poll() – чтение объекта из очереди, если таковой есть –remove()/remove(long timeout) – удаление объекта из очереди, если таковой есть

ReferenceQueue(пример) ReferenceQueue refQueue = NativeImage3.referenceQueue(); while (true) { NativeImage3 nativeImg = (NativeImage3) refQueue.remove(); nativeImg.dispose(); }

Метод Object.finalize() Каждый объект может переопределять метод, вызываемый перед удалением объекта из памяти Обычно используется для освобождения native ресурсов Нет гарантий относительно времени выполнения

finalize() (пример) class MyObject { protected void finalize() throws Throwable { System.out.println(this:"+this); }

System.gc() Указывает VM о желательности сборки мусора Не гарантирует начала работы GC Не рекомендуется для использования

Пример удержания ссылки 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());

Освобождение жесткой ссылки obj = null; System.gc(); System.out.println("Poll: "+ rq.poll()); //вернет obj System.out.println(Referent:"+wr.get()); //вернет null

Правда ли что… Сборка мусора может вносить непредвиденные задержки в работу программы Слабо(Weak) доступный объект можно восстановить (породить на него жесткую ссылку) У программиста нет механизмов воздействия на сборщик мусора

Сборка мусора Дмитриев Андрей Владиславович