Arhitectura memoriei JVM

Optimizarea codului în Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Ce este JVM?

  • Mediu de execuție independent de platformă
  • Convertește bytecode (.class) în cod mașină
  • Gestionarea memoriei și colectarea gunoiului
  • Compilare Just-In-Time
Optimizarea codului în Java

Prezentare generală a arhitecturii memoriei JVM

Arhitectura memoriei JVM

Optimizarea codului în Java

Memoria stack

  • Zonă de memorie pentru execuția metodelor și variabile locale
  • Structură LIFO (ultimul intrat, primul ieșit)
  • Stochează:
    • Variabile locale
    • Tipuri de date primitive
    • Informații despre apelurile de metode
  • StackOverflowError dacă dimensiunea este depășită
Optimizarea codului în Java

Memoria heap

  • Stochează toate obiectele și tablourile
  • new creează un obiect și îl alocă în heap
  • Gestionat de colectorul de gunoi
  • Dimensiune dinamică
  • Împărțit în generații
Optimizarea codului în Java

Memoria în acțiune

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Reference on Stack new ArrayList<>(); // Object on Heap
items.add(new String("Item")); // Object on Heap }
Optimizarea codului în Java

Tipare de cod eficiente din punct de vedere al memoriei

// Inefficient
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 objects
    list1.add(s);
}

// Better
List<String> list2 = new ArrayList<>();
String s = "value";  // Single object
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Optimizarea codului în Java

Rezumat

  • JVM gestionează memoria prin zonele stack și heap
  • Memoria stack -> rapidă, stochează primitive și referințe
  • Memoria heap -> stochează obiecte
Optimizarea codului în Java

Să exersăm!

Optimizarea codului în Java

Preparing Video For Download...