2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Roskankerääjä on jätteenkeräysalgoritmin erityinen toteutus . Koska roskankerääjä on jaettu nuoreen ja vanhaan sukupolveen, G1:n lisäksi (joka voi ohjata sekä uutta että vanhaa sukupolvea),Uuden sukupolven ja vanhan sukupolven jäteastioita tulee käyttää pareittain hotspotin vaatimusten mukaisesti.(Sinun on valittava vastaava yhdistelmä JDK-version mukaan)
Erityinen yhdistelmäsuhde on seuraava:
JVM:n taustalla olevassa lähdekoodissa CMS-kierrättäjä kutsuu joissakin erikoistapauksissa Serial Old -kierrättäjää.
Et voi suoraan nähdä, mitä roskakoria käytetään, voit päätellä sen vain algoritmin perusteella.
Sarja on aNuoren sukupolven yksisäikeinen sarjakokoelmaJätteen kerääjä.
Erinomainen suorituskyky yhdellä prosessorilla
Suorituskyky monen CPU:n alla ei ole yhtä hyvä kuin muilla roskakeräilijöillä (yksisäikeinen, vain yhtä CPU:ta käyttävä), jos kasa on liian suuri, käyttäjäsäie odottaa pitkään.
Java-kielellä kirjoitetut asiakasohjelmat tai skenaariot, joissa on rajoitettu laitteistokokoonpano (ei montaa suorittimen ydintä)
-XX: UseSerialGC
: Sekä uusi että vanha sukupolvi käyttävät sarjakerääjää.
SerialOld on Serial roskakeräimen vanhan sukupolven versio, joka käyttääYksisäikeinen sarjakokoelma
Erinomainen suorituskyky yhdellä prosessorilla
Multi-CPU:n läpimenokyky ei ole yhtä hyvä kuin muilla roskakeräilijöillä. Jos kasa on liian suuri, käyttäjäsäie odottaa pitkään.
Käytetään Serial roskakeräimen kanssa tai CMS:n erikoistapauksissa
-XX: UseSerialGC
: Sekä uusi että vanha sukupolvi käyttävät sarjakerääjää.
ParNew-jätteenkerääjä on pohjimmiltaanSerial-optimointi useiden prosessorien alla, käyttämällä monisäikeistystä roskien keräämiseen
-XX: UseParNewGC
: Uusi sukupolvi käyttää ParNew-keräilijää ja vanha sukupolvi sarjakerääjää.CMS-jätteenkeräin keskittyy järjestelmän taukoaikaan (minimoimaan STW:n ja optimoimaan käyttökokemuksen),Salli käyttäjäsäikeiden ja roskienkeräyssäikeiden suorittaa samanaikaisesti tietyissä vaiheissa, mikä vähentää käyttäjäsäikeiden odotusaikaa.
1. Muistin pirstoutumisongelma
2. Hajoamisongelma (joissakin erityistapauksissa se rappeutuu yksisäikeiseksi kerääjäksi, kuten SerialOld)
3. Kelluva roskaongelma (jotakin roskaa ei voida kierrättää kierrätysprosessin aikana)
Skenaariot suurissa Internet-järjestelmissä, joissa käyttäjät vaativat suuria tietomääriä ja korkeaa taajuutta, kuten tilausrajapinnat, tuoterajapinnat jne.
XX: UseConcMarkSweepGC
, voit asettaa nuoren ja vanhan sukupolven keräilijät.
Huomautus: STW tulee näkyviin vain alkumerkintä- ja uudelleenmerkintävaiheiden aikana.
puute:
1. CMS käyttää merkin ja tyhjennyksen algoritmia.CMS eheytyy Full GC:n aikana. . Tämä saa käyttäjäketjun keskeyttämään,Voit käyttää -XX:CMSFullGCsBeforeCompaction=N-parametria (oletusarvo 0) säätääksesi Full GC N kertaa ennen sen lajittelua.。
2. Ei pysty käsittelemään samanaikaisen siivousprosessin aikana syntyvää "kelluvaa roskaa", eikä täydellistä roskien keräämistä (tämän puhdistusprosessin aikana käyttäjäsäie loi samanaikaisesti joitain objekteja, mutta niitä ei käytetty pian uudelleen. Näitä objekteja se ei ole kierrätetään tässä siivouksessa ja sen on odotettava seuraavaan siivoukseen asti, joten sitä kutsutaan kelluvaksi roskiksi).
3. Jos vanhassa sukupolvessa ei ole tarpeeksi muistia objektien allokoimiseen, CMS muuttuu Serial Old -yksisäikeiseksi kierrättäen vanhaa sukupolvea.
Samanaikaisten säikeiden lukumäärä:
Säikeiden määrä ajettaessa samanaikaista vaihetta CMS:ssä voidaan siirtää-XX:ConcGCThreads
Järjestelmä laskee parametriasetukset, ja laskentakaava on:(-XX:ParallelGCThreads定义的线程数 3) / 4
, ParallelGCThreads on rinnakkaisten säikeiden määrä STW-tauon jälkeen
ParallelGCThreads määräytyy prosessoriytimien lukumäärän mukaan:
1. Kun suorittimen ytimien määrä on alle 8, ParallelGCThreads = CPU-ytimien määrä
2. Muuten ParallelGCThreads = 8 (CPU-ytimien määrä – 8)*5/8
Tietokoneessani on 12 loogista prosessoria, joten ParallelGCThreads = 8 (12 - 8) * 5/8 = 10, ConcGCThreads = (-XX: ParallelGCThreads 3:n määrittämien säikeiden määrä) / 4 = (10 3) / 4 = 3
Lopulta saat tämän kuvan:
Samanaikainen merkintä- ja samanaikainen puhdistusvaihe käsitellään rinnakkain kolmella kierteellä. Uudelleenmerkintävaihe käsitellään 10 säikeellä. Koska suorittimen ytimien määrä on rajoitettu, samanaikainen vaihe vaikuttaa käyttäjäsäikeen suoritustehoon.
Parallel Scavenge onJDK8 oletusarvoinen nuoren sukupolven roskakori,MonisäikeinenRinnakkaiskokoelma,Keskity järjestelmän suorituskykyyn .Suorituskyvyn lisäämiseksi PS tekeeSäädä kasan muistin kokoa automaattisesti (säädä uuden sukupolven, vanhan sukupolven muistin kokoa, edistämiskynnystä)。
Parallel Scavenge mahdollistaa suurimman taukoajan ja suorituskyvyn manuaalisen asettamisen. Oracle-virkailijat suosittelevat, että keon enimmäismuistia ei aseteta tätä yhdistelmää käytettäessä. Roskankerääjä säätää muistin kokoa automaattisesti enimmäistaukoajan ja suorituskyvyn perusteella.
-XX:MaxGCPauseMillis=n
Aseta millisekuntien enimmäismäärä keskeytettäväksi jokaiselle roskakeräykselle-XX:GCTimeRatio=n
Aseta suorituskyvyksi n (käyttäjäsäikeen suoritusaika = n/(n 1))-XX: UseAdaptiveSizePolicy
Asetus sallii roskakeräimen säätää automaattisesti muistin kokoa suorituskyvyn ja maksimitaukomillisekuntien perusteella. Tämä parametri on oletuksena käytössä (Oracle suosittelee, että PS-yhdistelmää käytettäessä ei määritetä enimmäismuistia ja anna roskakeräimen säätää automaattisesti).Huomautus: Kaksi enimmäistaukoajan ja suorituskyvyn ilmaisinta ovat ristiriidassa Roskienkeräin yrittää parhaansa noudattaa enimmäistaukoaikaa (joskus se on asetettu liian pieneksi, eikä sitä voida saavuttaa, ja asetettu enimmäistaukoaika ylittyy). , uhraten suorituskyvyn.Jos haluat asettaa enimmäistaukoajan ja suorituskyvyn samaan aikaan, sinun on tehtävä enemmän testejä koordinoidaksesi niitä.
Parallel Old on vanhan sukupolven versio, joka on suunniteltu Parallel Scavenge -keräilijälle, joka hyödyntää monisäikeistä samanaikaista keräämistä.
JDK8 asettaa parametrit tämän kierrättimen käyttöä varten oletuksena.
parametri:-XX: UseParallelGC
tai-XX: UseParallelOldGC
Voit käyttää yhdistelmää Parallel Scavenge Parallel Old.
-XX: PrintFlagsFinal
: Voit tulostaa kaikkien asetusten lopulliset arvot ohjelman käynnistyessä. Voit tarkistaa, onko automaattinen säätötoiminto päällä.
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* 垃圾回收器案例3
*/
//-XX: UseSerialGC -Xmn1g -Xmx16g -XX:SurvivorRatio=8 -XX: PrintGCDetails -verbose:gc -XX: PrintFlagsFinal
//-XX: UseParNewGC -Xmn1g -Xmx16g -XX:SurvivorRatio=8 -XX: PrintGCDetails -verbose:gc
//-XX: UseConcMarkSweepGC
//-XX: UseG1GC -Xmn8g -Xmx16g -XX:SurvivorRatio=8 -XX: PrintGCDetails -verbose:gc MaxGCPauseMillis
//-XX: PrintFlagsFinal -XX:GCTimeRatio = 19 -XX:MaxGCPauseMillis=10 -XX: UseAdaptiveSizePolicy
public class GcDemo2 {
public static void main(String[] args) throws IOException {
int count = 0;
List