2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Kirjailija: ofLJli
Linkki: https://juejin.cn/post/7003213289425633287?searchId=20240709085629749958B21D886D4E67D4
Lähde: Rare Earth Nuggets
Tekijänoikeus kuuluu tekijälle. Jos kyseessä on kaupallinen uusintapaino, ota yhteyttä tekijään luvan saamiseksi.
JVM:n päärakenteet ovat: virtuaalikoneen pino, pino ja metodialue. Virtuaalikonepinon pinokehyksen koon on määrittänyt kääntäjä Metodin tai säietekniikan päättyessä myös virtuaalikoneen pinon muisti kierrätetään. Java-keko- ja menetelmä-alueella on merkittäviä epävarmuustekijöitä. Tämän muistin osan jakaminen ja kierrätys ovat dynaamisia.
Tämä artikkeli keskittyy seuraaviin kolmeen asiaan, jotka GC:n on suoritettava:
Kahden sukupolven hypoteesin mukaan:绝大多数的对象都是朝生夕死
,熬过越多次的GC回收的对象就越难回收
. Kasa on jaettu sukupolviin: uusi sukupolvi (Eden, From, To), vanha sukupolvi ja sukupolvien kierrätystä tehdään myös GC:n aikana.
Pieni GC : Kierrätä uuden sukupolven käyttämättömät esineet Useimmille uuden sukupolven esineille on ominaista, että ne elävät ja kuolevat yhdessä yössä. Käynnistysajat ovat:
标记-复制算法
Kierrätä tämä alue (käsitellään myöhemmin).Majuri GC : Kierrätä vanhan sukupolven käyttämättömät esineet.yleinen käyttö标记-清除算法
tai标记-整理算法
Kierrättää.
Täysi GC : Kierrätä käyttämättömät kohteet kasa- ja menetelmäalueella. Full GC -kierrätysalue on suhteellisen suuri ja pitkä suoritusaika saattaa aiheuttaa viiveitä, joten Full GC:n määrää tulee vähentää mahdollisimman paljon. Laukaisuajat ovat suunnilleen seuraavat:
Vanhan sukupolven tilan riittämättömyys johtuu uuden sukupolven esineistä, jotka tulevat vanhaan sukupolveen, suuret esineet suoraan vanhaan sukupolveen jne. Jos näitä esineitä ei voida säilyttää vanhan sukupolven jatkuvassa enimmäistilassa, suoritetaan täysi GC-kierrätys. .
Menetelmäalueella ei ole tarpeeksi tilaa. Menetelmäalue tallentaa pääosin tyyppitietoa ja jatkuvia pooleja. On myös olemassa vaara, että tila ei riitä, ja suoritetaan täysi GC-kierrätys.
System.gc() on nimenomaisesti kutsuttu ja Full GC kierrättää sen.
Periaate: käyttö可达性分析算法
Tee käyttämättömistä objekteistamerkkija suorita sittenAsia selvä . Haitat: Merkintätehokkuus on alhainen, kun kohteita on paljon. Objektin tyhjentämisen jälkeen tapahtuu muistin pirstoutumista ja muisti on epäjatkuva. Tarkoitus: Jotkut keräilijät käyttävät tätä algoritmia vanhan sukupolven kokoelmassa
Periaate: Jaa muistitila kahteen osaan, puolet käytetään objektien tallentamiseen ja toinen puoli on vapaata.Jos esineiden säilytysalue on täynnä, käytä可达性分析算法
Siirrä eläviä esineitämerkkitule ulos ja sittenkopio Siirry toiselle tyhjälle alueelle ja tyhjennä kaikki edelliset alueet tyhjiksi jatkuviin tiloihin. Haitta: Jos säilyneitä esineitä on paljon, tarvitaan paljon muistin kopiointia ja kehitystä. Muistitila voi käyttää vain puolet eduista ja tuhlata resursseja. Toiminto: Tätä kierrätysalgoritmia käytetään yleensä kohteissa, jotka elävät ja kuolevat uuden sukupolven aikana. Replikointialgoritmi on kuitenkin optimoitu uudessa sukupolvessa, mutta tämä algoritmi lisää allokointitakuumekanismin estämään liian monen eloonjääneen objektin allokoinnin. Appel-tyylistä kierrätysalgoritmia käytetään:
Periaate: Merkintäprosessi on seuraava标记-清除算法
Sama sitten整理存
Elävät objektit siirtyvät toiseen päähän ja sitten kaikki elävän rajan ulkopuolella olevat objektit清除
. Haitat: Esineiden siirtäminen sisältää jonkin verran riskiä. Liian monet esineet ovat tehottomia.
GC:n käyttämää roskakerääjää käytetään kierrätykseen. kokoelma.
Yksisäikeisten keräilijöiden yhdistelmät ovat: Serial/Serial Vanha keräilijä. He eivät ainoastaan käytä kokoelmasäiettä kokoelmatoiminnon suorittamiseen, vaan kokoelmasäikeen toimiessa käyttäjäsäikeen on lakattava odottamasta, kunnes kokoelma on valmis. Kuvassa on Serial/Serial Old -keräimen kaavio:
Jos asiakkaan muistiresurssit ovat rajalliset, prosessoriytimien määrä on pieni tai kyseessä on yksiytiminen prosessori, sen yksinkertaisuus ja tehokkuus voivat saada keräilijän suorittamaan työnsä mahdollisimman nopeasti.
Monisäikeisiä keräilijöitä ovat: ParNew, Parallel Scavenge ja Parallel Old, joista Parallel Scavenge/Parallel Old on yhdistetty keräilijä. Nämä monisäikeiset keräilijät lisäävät vain jätteenkeräyssäikeitä, ja käyttäjäsäikeet lakkaavat edelleen odottamasta roskien keräämistä.
parNew kerääjä: Se on itse asiassa monisäikeinen versio Serialista. Se voi tällä hetkellä toimia yhteistyössä Serial-keräilijän ja CMS-keräilijän kanssa.
Parallel Scavenge -keräin: Käytetään yleensä yhdessä Parallel Old -keräimen kanssa.Verrattuna parNew keräilijään, se kiinnittää enemmän huomiota吞吐量
ohjaus, läpijuoksu onKäyttäjäsäikeen suoritusaika vastaa suorittimen kokonaiskäyttöaikaa, läpimeno on tietysti mitä suurempi, sitä parempi.
Multi-threading käyttää yleensä palvelinta, koska monisäikeen suorittamiseen liittyy aikaviipaleen kiertokulun aika. Jos kyseessä on yksi prosessori, käsittelyteho on epäilemättä hitaampi. Mutta se on erittäin hyvä resursseille, ja analyysilaskelmien palvelinpuoli, jonka ei tarvitse olla vuorovaikutuksessa käyttäjän kanssa, voi lisätä suoritustehokkuutta.
Samanaikaisia kerääjiä ovat: CMS-keräilijä, joka pyrkii pitämään järjestelmän taukoajan mahdollisimman lyhyenä ja tarjoamaan paremman käyttökokemuksen. Sen kokoelmasäie voidaan suorittaa samanaikaisesti käyttäjäsäikeen kanssa. CMS:ssä on kolme标记
(alkuarvosana, rinnakkaisarvosana, huomautus) ja kerran清理
(Samanaikainen puhdistus), kaksi kolmesta merkinnöistä edellyttää lyhyemmän käyttäjäsäikeen pysähtymistä, yhden pidemmän merkinnän, joka on samanaikainen käyttäjäsäikeen kanssa, ja tyhjennyksen, joka on samanaikainen käyttäjäsäikeen kanssa.
alkumerkki: Merkitse ensimmäinen GC Rootsiin liittyvä objekti, aika on hyvin lyhyt samanaikainen merkintä: Suorita GC Rootsin viiteketju (saatettavuusanalyysialgoritmi) samanaikaisesti käyttäjäsäikeen kanssa, mikä kestää kauan merkitä uudelleen : Hae uudelleen samanaikaisen merkintävaiheen aikana käyttäjäketjun luomaa uutta viiteketjua. Hieman pidempi kuin alkuperäinen merkki.Samanaikainen selkeä:käyttää标记-清除算法
Puhdista hyödyttömät esineet.
Kolme suurta haittaa: 1: Suorittimen herkkyys, samanaikaisuus voi vaikuttaa käyttäjän säikeiden toimintaan prosessoreissa, joissa on pieni määrä ytimiä. 2: Kelluva roska: Samanaikaisen puhdistusvaiheen aikana syntyneet roskat voivat vain odottaa seuraavaa GC-keräystä. Kolme: Muistin pirstoutuminen, merkintä-puhdistus Puja-tuotteissa on paljon epäjatkuvaa muistitilaa.
Tämä artikkeli alkaa那些内存需要回收
,什么时候回收
,如何回收
Toteutuksena kirjoitetaan kaksi objektin selviytymisarviointialgoritmia, luokka-alueen kierrätyksen ehdot, kierrätyksen sukupolvimekanismi ja keräysajoitus, kolme keräilyalgoritmia ja yleisesti käytetyt roskakeräimet.