Управління пам’яттю

Хоча Java не дозволяє явно знищувати непотрібні обєкти, ви можете безпосередньо викликати збирач сміття, використовуючи метод gc класу Runtime Клас Runtime також містить метод runFinalization для виклику чекаючих блоків завершення (finalizers) Клас Runtime містить два методи для виведення інформації про стан памяті:

public long freeMemory()

Повертає приблизну кількість вільних байтів системної памяті public long totalMemory()

Повертає загальна кількість байтів системної памяті

Клас System містить статичні методи gc і runFinalization, які викликають відповідний метод для поточного runtime-контексту

Не виключено, що метод Runtimegc не зможе звільнити додаткову память за рахунок рятування від сміття – його може і не бути, до того ж не всі збирачі сміття можуть знаходити непотрібні обєкти на вимогу Проте перед створенням великої кількості обєктів (особливо в додатках, критичних за часом, на роботі яких можуть негативно позначитися накладні витрати по збірці сміття) все ж варто викликати метод gc Він приносить подвійну користь: ви починаєте роботу з максимальним обємом вільної памяті і скорочуєте ймовірність виклику збирача сміття під час виконання програми Наступний метод звільняє всю можливу память:

public static void fullGC() {

Runtime rt = RuntimegetRuntime()

long isFree = rtfreeMemory()

long wasFree

do {

wasFree = isFree

rtgc()

isFree = rtfreeMemory()

} while (isFree &gt&gt wasFree)

rtrunFinalization()

}

Даний метод в циклі викликає gc, при цьому обсяг вільної памяті freeMemory збільшується до певної межі, після досягнення якого подальші виклики gc, швидше за все, ні до чого не приведуть Потім ми звертаємося до runFinalization, щоб негайно виконати всі завершальні дії, не дозволяючи збирачеві сміття відкласти їх на потім

Зазвичай вам нема чого використовувати runFinalization, оскільки методи finalize викликаються складальником сміття асинхронно Однак при деяких обставинах (наприклад, при нестачі ресурсу, який звільняли методом finalize) вимушене виконання всіх можливих завершальних дій здатне принести користь Звичайно, немає ніякої гарантії, що сподівання-ющіе завершення обєкти використовують даний ресурс, так що виклик run Finalization може виявитися марним

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*