Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+651новая вакансия за сутки·50 282вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 544
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 394 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python5 917
  • Облачные технологии4 462
  • QA вакансии1 683
  • Android1 136
  • Инженер данных753
  • Продакт-менеджер293

Разработка

  • iOS1 085
  • Backend вакансии982
  • Fullstack вакансии435
  • AI вакансии362
  • Frontend вакансии361
  • Mobile вакансии27

По стеку

  • Go3 333
  • Java2 015
  • Kotlin904
  • Node.js734
  • Rust490
  • .NET474
  • PHP271
  • C++208
  • C#191

DevOps и инфраструктура

  • Kubernetes2 532
  • Linux-инфраструктура2 017
  • DevOps вакансии1 827
  • Terraform / IaC1 535
  • CI/CD848
  • Мониторинг и Observability707
  • SRE221
  • Кибербезопасность37

Аналитика и данные

  • Аналитик данных467
  • Data Scientist417
  • Бизнес-аналитик335
  • Системный аналитик49

Другие направления

  • Проджект-менеджер100
  • UI/UX дизайн66
  • Ручное тестирование14

По регионам

  • Вакансии в США22 951
  • Вакансии в Европе9 026
  • Работа в России2 963
  • Вакансии в Канаде2 034

По формату

  • Удалённые вакансии39 691
  • Релокация в США22 951
  • Гибридная работа3 633
  • Офисная работа2 761

По уровню

  • Senior вакансии19 599
  • Middle вакансии11 130
  • Junior вакансии3 562

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise81 вакансия
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify17 вакансий
  • Celonis14 вакансий
  • UiPath13 вакансий
  • Adyen9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме JavaВсе вопросы
JavaMiddleПроектирование систем

Как работает модель памяти Java? В чём разница между heap и stack?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Stack хранит фреймы вызовов с локальными переменными и ссылками — быстрая LIFO-структура, выделяется автоматически. Heap — общая область для всех объектов, управляемая GC, разделённая на поколения (Young/Old).

Heap: общая куча

Все объекты и массивы размещаются в куче. Куча разделена на поколения (в G1GC — регионы):

  • Young Generation: Eden + два Survivor (S0/S1). Большинство объектов умирают здесь (Minor GC, STW, быстрый).
  • Old Generation (Tenured): объекты, пережившие порог промоций (-XX:MaxTenuringThreshold, default 15). Major/Full GC — дорогостоящий.
  • Metaspace (с Java 8): метаданные классов — вынесено из кучи в нативную память. Не ограничено по умолчанию, контролируется -XX:MaxMetaspaceSize.
// Демонстрация: что где хранится
public class MemoryDemo {
    // Метаданные класса — Metaspace
    private static final String CONSTANT = "hello";  // Ссылка — Old Gen (String pool)

    public void process() {
        int localInt = 42;            // Stack (frame текущего вызова)
        String localRef = new String("world"); // Ссылка — Stack, объект — Heap (Eden)
        Object[] array = new Object[1000];     // Массив — Heap (Eden)

        // localInt, localRef освобождаются при выходе из метода
        // array и new String(...) — кандидаты на GC
    }

    public static void main(String[] args) {
        MemoryDemo demo = new MemoryDemo(); // demo — Stack (main frame), объект — Heap
        demo.process();
        // После return из process() — объекты в Eden ждут Minor GC
    }
}

Stack: память потока

Каждый поток Java получает собственный стек. При каждом вызове метода JVM создаёт stack frame, который содержит:

  • Локальные переменные примитивных типов (int, long, boolean и др.)
  • Ссылки на объекты (сама ссылка — в стеке, объект — в куче)
  • Операндный стек для вычислений байткода
  • Ссылку на constant pool класса

По завершении метода фрейм уничтожается мгновенно — GC не участвует. Размер стека задаётся флагом -Xss (default: 512 KB–1 MB в зависимости от ОС). Переполнение → StackOverflowError.

Мониторинг памяти

# Текущее потребление кучи через JMX/jcmd
jcmd <pid> VM.native_memory
jcmd <pid> GC.heap_info

# Heap dump для анализа в Eclipse MAT или VisualVM
jmap -dump:format=b,file=heap.hprof <pid>
# или флаги JVM
# -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dumps/
// Программный доступ к метрикам памяти
import java.lang.management.*;

MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapUsage = memBean.getHeapMemoryUsage();
System.out.printf("Heap: used=%d MB, max=%d MB%n",
    heapUsage.getUsed() / 1_048_576,
    heapUsage.getMax() / 1_048_576);

MemoryUsage nonHeap = memBean.getNonHeapMemoryUsage();
System.out.printf("Metaspace: used=%d MB%n",
    nonHeap.getUsed() / 1_048_576);

Подводные камни

  • Путаница «объект в стеке»: объекты всегда в куче (Escape Analysis может оптимизировать, но это детали JIT). Ссылка — в стеке или поле другого объекта.
  • String interning: строковые литералы попадают в String Pool (часть Heap с Java 7+), не создавая дублей. new String("x") — всегда новый объект в куче.
  • StackOverflowError при глубокой рекурсии: стек потока ограничен (-Xss). Альтернативы — хвостовая рекурсия (JVM не оптимизирует автоматически) или итеративный подход.
  • Metaspace OOM при динамической генерации классов: Hibernate, CGLIB, Groovy генерируют классы в рантайме — без -XX:MaxMetaspaceSize можно исчерпать нативную память.
  • Финализаторы задерживают GC: объекты с finalize() проходят дополнительный цикл — используйте Cleaner (Java 9+) или try-with-resources.
  • Неправильные -Xms/-Xmx: JVM с -Xms512m -Xmx4g постоянно расширяет кучу через GC-паузы. Для предсказуемости устанавливайте одинаковые значения.

Типичные ошибки

  • Путать термин «heap stack memory» с соседним механизмом Java.
  • Не называть границу lifecycle, transaction, thread или request для «heap stack memory».
  • Игнорировать production-эффекты «heap stack memory»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «heap stack memory» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «heap stack memory».
  • Уточнить, какие настройки или API меняют «heap stack memory» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Java →

Источники

  • https://docs.oracle.com/javase/specs/jls/se21/html/jls-17.html
←Предыдущий вопросКак работает сборка мусора в Java? Объясните G1GC, ZGC и Shenandoah.Следующий вопрос→Объясните Java Memory Model (JMM) и концепцию happens-before.

Связанные темы

Javaarchitecture-tradeoffsproduction-readiness

Частые вопросы на собеседовании

  • Как работает сборка мусора в Java? Объясните G1GC, ZGC и Shenandoah.
  • Объясните Java Memory Model (JMM) и концепцию happens-before.
  • Что такое virtual threads (Project Loom) и чем они отличаются от platform threads?
  • Объясните разницу между synchronized и ReentrantLock.