Розуміння архітектури пам'яті JVM

Оптимізація коду в Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Що таке JVM?

  • Платформонезалежне середовище виконання
  • Перетворює байткод (.class) на машинний код
  • Керує пам'яттю та збирає сміття
  • Just-In-Time компіляція
Оптимізація коду в Java

Огляд архітектури пам'яті JVM

Архітектура пам'яті JVM

Оптимізація коду в Java

Пам'ять стека

  • Область для виконання методів і локальних змінних
  • Структура LIFO (Last-In-First-Out)
  • Зберігає:
    • Локальні змінні
    • Примітивні типи даних
    • Інформацію про виклик методів
  • StackOverflowError, якщо розмір перевищено
Оптимізація коду в Java

Пам'ять купи

  • Зберігає всі об'єкти та масиви
  • new створює об'єкт і розміщує його в купі
  • Керується збирачем сміття
  • Динамічний розмір
  • Поділена на покоління
Оптимізація коду в Java

Пам'ять у дії

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 }
Оптимізація коду в Java

Пам'яттєво ефективні шаблони коду{{1}}

// 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);
}
Оптимізація коду в Java

Підсумок

  • JVM керує пам'яттю переважно через стек і купу
  • Пам'ять стека → швидка, зберігає примітиви й посилання
  • Пам'ять купи → зберігає об'єкти
Оптимізація коду в Java

Давайте потренуємось!

Оптимізація коду в Java

Preparing Video For Download...