logo

Управљање меморијом у Јави

У Јави, управљање меморијом је процес алокације и де-алокације објеката, који се назива управљање меморијом. Јава управља меморијом аутоматски. Јава користи аутоматски систем за управљање меморијом који се зове а Ђубретар . Дакле, од нас се не тражи да имплементирамо логику управљања меморијом у нашој апликацији. Јава управљање меморијом се дели на два главна дела:

    Структура ЈВМ меморије Рад сакупљача смећа

Структура ЈВМ меморије

ЈВМ креира различите области података о времену извршавања у хрпи. Ове области се користе током извршавања програма. Меморијске области се уништавају када ЈВМ изађе, док се области података уништавају када нит изађе.

Управљање меморијом у Јави

Метод Област

Област методе је део меморије гомиле која се дели међу свим нитима. Ствара се када се ЈВМ покрене. Користи се за чување структуре класе, имена суперкласе, имена интерфејса и конструктора. ЈВМ складишти следеће врсте информација у области метода:

  • Потпуно квалификовано име типа (нпр. Стринг)
  • Модификатори типа
  • Директно име суперкласе типа
  • Структурисана листа потпуно квалификованих имена супер интерфејса.

Хеап Ареа

Хеап складишти стварне објекте. Ствара се када се ЈВМ покрене. Корисник може да контролише гомилу ако је потребно. Може бити фиксне или динамичке величине. Када користите нову кључну реч, ЈВМ креира инстанцу за објекат у хрпи. Док се референца тог објекта чува у стеку. Постоји само једна хрпа за сваки покренути ЈВМ процес. Када се гомила напуни, смеће се скупља. На пример:

 StringBuilder sb= new StringBuilder(); 

Горња изјава креира објекат класе СтрингБуилдер. Објекат се додељује у хрпу, а референца сб додељује стеку. Хеап је подељен на следеће делове:

  • Млада генерација
  • Сурвивор спаце
  • Стара генерација
  • Перманентна генерација
  • Кеш кода

Референце Типе

Постоје четири врсте референци: Јака , Слабо , Софт , и Фантомска референца . Разлика између типова референци је у томе што су објекти на хрпи на коју се односе подобни за сакупљање смећа према различитим критеријумима.

Јака референца: Веома је једноставан јер га користимо у свакодневном програмирању. Било који објекат који има снажну референцу повезану са њим није подобан за сакупљање смећа. Можемо створити снажну референцу користећи следећу изјаву:

 StringBuilder sb= new StringBuilder(); 

Слаба референца: Не опстаје након следећег процеса сакупљања смећа. Ако нисмо сигурни када ће подаци бити поново тражени. У овом стању, можемо створити слабу референцу на то. У случају да сакупљач смећа обрађује, уништава објекат. Када поново покушамо да преузмемо тај објекат, добијамо нулту вредност. Дефинисано је у јава.ланг.реф.ВеакРеференце класа. Можемо креирати слабу референцу користећи следећу изјаву:

 WeakReference reference = new WeakReference(new StringBuilder()); 

Мека референца: Прикупља се када апликацији понестане меморије. Сакупљач смећа не сакупља лако доступне предмете. Сви меки референцирани објекти се прикупљају пре него што избаци ОутОфМемориЕррор. Можемо креирати меку референцу користећи следећу изјаву:

 SoftReference reference = new SoftReference(new StringBuilder()); 

фантомска референца: Доступан је у јава.ланг.реф пакет. Дефинисано је у јава.ланг.реф.ПхантомРеференце класа. Објект који има само фантомску референцу која их упућује може се прикупити кад год сакупљач смећа жели да прикупи. Можемо креирати фантомску референцу користећи следећу изјаву:

 PhantomReference reference = new PhantomReference(new StringBuilder()); 

Стацк Ареа

Стацк Ареа се генерише када се нит креира. Може бити фиксне или динамичке величине. Меморија стека се додељује по нити. Користи се за чување података и делимичних резултата. Садржи референце на хеап објекте. Такође садржи саму вредност, а не референцу на објекат из гомиле. Променљиве које се чувају у стеку имају одређену видљивост, која се назива опсег.

Оквир стека: Оквир стека је структура података која садржи податке нити. Подаци о нити представљају стање нити у тренутној методи.

  • Користи се за складиштење делимичних резултата и података. Такође врши динамичко повезивање, враћа вредности методама и шаље изузетке.
  • Када се метода позове, креира се нови оквир. Уништава оквир када се позивање методе заврши.
  • Сваки оквир садржи сопствени низ локалних променљивих (ЛВА), стек операнда (ОС) и податке оквира (ФД).
  • Величине ЛВА, ОС и ФД одређене у време компајлирања.
  • Само један оквир (оквир за извршавање метода) је активан у било којој тачки у датој нити контроле. Овај оквир се назива тренутни оквир, а његов метод је познат као текући метод. Класа метода се назива текућа класа.
  • Оквир зауставља тренутни метод, ако његов метод позове други метод или ако се метода заврши.
  • Оквир креиран од стране нити је локални за ту нит и не може се на њега референцирати ниједна друга нит.

Нативе Метход Стацк

Такође је познат као Ц стек. То је стек за изворни код написан на језику који није Јава. Јава Нативе Интерфаце (ЈНИ) позива изворни стек. Перформансе матичног стека зависе од ОС-а.

ПЦ Регистрс

Свака нит има регистар програмског бројача (ПЦ) повезан са њом. ПЦ регистар чува повратну адресу или изворни показивач. Такође садржи адресу ЈВМ инструкција које се тренутно извршавају.

Рад сакупљача смећа

Преглед сакупљача смећа

Када се програм извршава у Јави, он користи меморију на различите начине. Хрпа је део меморије у којој објекти живе. То је једини део меморије који је укључен у процес сакупљања смећа. Позната је и као гомила смећа. Сво сакупљање смећа осигурава да гомила има што више слободног простора. Функција сакупљача смећа је да пронађе и избрише објекте до којих се не може доћи.

Алокација објеката

Када се објекат додели, ЈРоцкит ЈВМ проверава величину објекта. Разликује мале и велике објекте. Мала и велика величина зависе од ЈВМ верзије, величине гомиле, стратегије сакупљања смећа и коришћене платформе. Величина објекта је обично између 2 и 128 КБ.

Мали објекти се чувају у Тхреад Лоцал Ареа (ТЛА) која је слободан део гомиле. ТЛА се не синхронизује са другим нитима. Када ТЛА постане пун, тражи се нови ТЛА.

С друге стране, велики објекти који се не уклапају у ТЛА директно се додељују у гомилу. Ако нит користи млади простор, она се директно чува у старом простору. Велики објекат захтева више синхронизације између нити.

Шта ради Јава Гарбаге Цоллецтор?

ЈВМ контролише сакупљач смећа. ЈВМ одлучује када ће извршити сакупљање смећа. Такође можемо да захтевамо од ЈВМ-а да покрене сакупљач смећа. Али не постоји гаранција ни под којим условима да ће се ЈВМ придржавати. ЈВМ покреће сакупљач смећа ако осети да је меморија при крају. Када Јава програм захтева сакупљач смећа, ЈВМ обично одобрава захтев у кратком року. То не осигурава да се захтеви прихватају.

Поента коју треба разумети је да ' када објекат постане квалификован за одлагање смећа? '

Сваки Јава програм има више од једне нити. Свака нит има свој стек за извршавање. Постоји нит за покретање у Јава програму која је маин() метода. Сада можемо рећи да је објекат подобан за сакупљање смећа када му ниједна жива нит не може приступити. Сакупљач смећа сматра тај објекат подобним за брисање. Ако програм има референтну променљиву која се односи на објекат, та референтна променљива је доступна живој нити, овај објекат се позива доступан .

Овде се поставља питање да ' Може ли Јава апликација остати без меморије? '

Одговор је да. Систем за сакупљање смећа покушава да објекте из меморије када нису у употреби. Мада, ако одржавате много живих објеката, сакупљање смећа не гарантује да има довољно меморије. Ефикасно ће се управљати само доступном меморијом.

број у низ јава

Врсте сакупљања смећа

Постоји пет врста сакупљања смећа:

    Серијски ГЦ:Користи приступ за младе и старе генерације, који је мањи и већи ГЦ.Паралелни ГЦ:Сличан је серијском ГЦ-у само што ствара Н (број ЦПУ језгара у систему) нити за прикупљање смећа младе генерације.Паралелни стари ГЦ:Сличан је паралелном ГЦ-у, осим што користи више нити за обе генерације.Цонцуррент Марк Свееп (ЦМС) Цоллецтор:Ради одвоз смећа за стару генерацију. Можете ограничити број нити у ЦМС колектору користећи КСКС:ПараллеЦМСТхреадс=ЈВМ опција . Такође је познат као колектор истовремених ниских пауза.Г1 сакупљач смећа:Представљен је у Јави 7. Његов циљ је да замени ЦМС колектор. То је паралелни, истовремени и ЦМС колектор. Нема простора за младе и старе генерације. Она дели гомилу на неколико гомила једнаке величине. Прво прикупља регионе са мање живих података.

Алгоритам означавања и померања

ЈРоцкит ЈВМ користи алгоритам означавања и чишћења за обављање сакупљања смећа. Садржи две фазе, фазу обележавања и фазу померања.

Означите фазу: Објекти који су доступни из нити, изворних ручки и других ГЦ коренских извора су означени као живи. Свако стабло објеката има више од једног коренског објекта. ГЦ роот је увек доступан. Дакле, сваки објекат који у свом корену има корен сакупљања смећа. Идентификује и обележава све објекте који су у употреби, а преостали се могу сматрати смећем.

Управљање меморијом у Јави

Фаза чишћења: У овој фази, преко гомиле се прелази да би се пронашао јаз између живих објеката. Ове празнине се евидентирају у слободној листи и доступне су за доделу нових објеката.

Постоје две побољшане верзије маркирања и померања:

    Истовремено означавање и померање Параллел Марк анд Свееп

Истовремено означавање и померање

Омогућава нитима да наставе да раде током великог дела сакупљања смећа. Постоје следеће врсте обележавања:

    Прво обележавање:Он идентификује основни скуп живих објеката. То се ради док су нити паузиране.Истовремено обележавање:У овом обележавању прате се референце из основног скупа. Проналази и обележава остатак живих објеката у гомили. То се ради док је нит покренута.Ознаке пре чишћења:Он идентификује промене направљене истовременим обележавањем. Остали живи објекти означени и пронађени. То се ради док су нити покренуте.Коначно обележавање:Он идентификује промене направљене обележавањем пре чишћења. Остали живи објекти означени и пронађени. То се ради док су нити паузиране.

Параллел Марк анд Свееп

Користи све расположиве ЦПУ у систему за обављање сакупљања смећа што је брже могуће. Такође се назива и паралелни сакупљач смећа. Нити се не извршавају када се извршава паралелно сакупљање смећа.

Предности Марка и Свееп-а

  • То је процес који се понавља.
  • То је бесконачна петља.
  • Нису дозвољени додатни трошкови током извршавања алгоритма.

Против Марка и Свееп-а

  • Зауставља нормално извршавање програма док алгоритам за сакупљање смећа ради.
  • Покреће се више пута на програму.