7.1* Cum să alegi colectorul de gunoi potrivit

Dacă aplicația dvs. nu are cerințe stricte de latență, ar trebui doar să rulați aplicația și să lăsați JVM-ul însuși să aleagă colectorul potrivit.

În cele mai multe cazuri, setările implicite funcționează bine. Dacă este necesar, puteți ajusta dimensiunea heap-ului pentru a îmbunătăți performanța. Dacă performanța nu este în continuare cea așteptată, încercați să modificați colectorul pentru a se potrivi cerințelor aplicației dvs.

  • Secvenţial . Dacă aplicația are un set mic de date (până la aproximativ 100 MB) și/sau va rula pe un singur procesor fără cerințe de latență.
  • Paralel . Dacă prioritatea este performanța maximă a aplicației și nu există cerințe de latență (sau pauze de o secundă sau mai multe sunt acceptabile).
  • CMS/G1 . Dacă timpul de răspuns este mai important decât debitul general, iar pauzele de colectare a gunoiului ar trebui să fie mai scurte de o secundă.
  • ZGC . Dacă timpul de răspuns este prioritar și/sau este implicat un heap foarte mare.

7.2* Recomandări pentru colectarea gunoiului

Evitați declanșatoarele manuale

Pe lângă mecanismele de bază ale colectării gunoiului, unul dintre cele mai importante puncte despre acest proces în Java este că este nedeterminist. Adică, este imposibil de prezis când va avea loc exact în timpul executării.

Folosind metodele System.gc() sau Runtime.gc(), puteți include un indiciu în codul dvs. pentru a porni colectorul de gunoi, dar acest lucru nu garantează că acesta va rula efectiv.

Utilizați instrumente de analiză

Dacă nu aveți suficientă memorie pentru a rula aplicația, veți întâmpina încetiniri, timpi lungi de colectare a gunoiului, evenimente de „oprire a lumii” și eventual erori de lipsă de memorie. Acest lucru poate indica faptul că heap-ul este prea mic, dar poate indica și faptul că aplicația are o scurgere de memorie.

Puteți utiliza un instrument de monitorizare precum jstat sau Java Flight Recorder pentru a vedea dacă utilizarea heap-ului crește pe termen nelimitat, ceea ce ar putea indica o eroare în cod.

Preferați setările implicite

Dacă aveți o aplicație Java mică, independentă, probabil că nu va trebui să configurați colectarea gunoiului. Setările implicite vă vor servi bine.

Utilizați steaguri JVM pentru a personaliza

Cea mai bună abordare pentru a configura colectarea gunoiului în Java este să setați steaguri JVM. Se pot folosi steaguri pentru a seta colectorul de gunoi (de exemplu, Serial, G1 și așa mai departe), dimensiunea inițială și maximă a heap-ului, dimensiunea partițiilor heap (de exemplu, Young generation, Old generation) și multe altele. Mai mult.

Alegeți robinetul potrivit

Un ghid bun în ceea ce privește setările inițiale este natura aplicației personalizate. De exemplu, colectorul de gunoi simultan este eficient, dar deseori ridică evenimente de „oprire în lume”, făcându-l mai potrivit pentru procesarea internă, unde sunt acceptabile pauze lungi.

În același timp, colectorul de gunoi CMS este conceput pentru a minimiza latența, ceea ce îl face ideal pentru aplicațiile web în care capacitatea de răspuns este importantă.