← Назад к вопросам

Где хранятся примитивные переменные объекта?

2.0 Middle🔥 111 комментариев
#JVM и управление памятью

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Где хранятся примитивные переменные объекта

Это фундаментальный вопрос о памяти в Java. Ответ зависит от того, где объявлена переменная.

Локальные примитивные переменные → Stack (стек)

Если примитивная переменная объявлена внутри метода, она хранится в Stack:

public void example() {
    int age = 25;           // Stack
    double salary = 5000.0; // Stack
    boolean isActive = true; // Stack
}

Это наиболее частый случай. Stack — это быстрая память с LIFO (Last-In-First-Out) семантикой. Когда метод завершается, все его локальные переменные автоматически удаляются.

Поля объекта (member variables) → Heap (куча)

Если примитивная переменная — поле класса, она хранится в Heap вместе с объектом:

public class Person {
    private int age;           // Heap (часть объекта Person)
    private double salary;     // Heap
    private boolean isActive;  // Heap
}

person person = new Person(); // объект в Heap, примитивы внутри него тоже в Heap

Когда создаётся объект Person, он целиком размещается в Heap, включая его примитивные поля.

Статические переменные → MethodArea/Heap

Статические примитивные переменные хранятся в области памяти Method Area (или Static Area):

public class Config {
    public static int MAX_CONNECTIONS = 100; // MethodArea/Static Area
}

Эти переменные существуют одну копию на весь класс и живут столько же, сколько класс загружен.

Практические следствия

  1. Производительность: локальные примитивы на Stack быстрее, чем поля на Heap
  2. Lifetime: локальные переменные удаляются при выходе из scope, поля удаляются с объектом
  3. Доступ: локальные примитивы доступны только в методе, поля доступны везде (если не private)

Памятка

  • Локальные в методе → Stack ✓
  • Поля класса → Heap (часть объекта) ✓
  • Статические → MethodArea ✓
  • Объекты-обёртки (Integer, Double) → Heap (это объекты, а не примитивы!)

Это различие критично для понимания производительности приложений и отладки проблем с памятью.

Где хранятся примитивные переменные объекта? | PrepBro