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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python16 845
  • Облачные технологии13 724
  • QA вакансии3 439
  • Backend вакансии2 084
  • Инженер данных1 763
  • Продакт-менеджер1 196

Разработка

  • Android1 845
  • iOS1 689
  • Fullstack вакансии960
  • AI вакансии950
  • Frontend вакансии736
  • Mobile вакансии44

По стеку

  • Go8 619
  • Java6 379
  • Node.js1 971
  • .NET1 640
  • Kotlin1 599
  • Rust1 443
  • PHP670
  • C#650
  • C++536

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

  • Kubernetes7 591
  • DevOps вакансии5 865
  • Linux-инфраструктура5 413
  • Terraform / IaC4 162
  • CI/CD2 991
  • Мониторинг и Observability1 752
  • SRE558
  • Кибербезопасность424

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

  • Data Scientist1 087
  • Бизнес-аналитик910
  • Аналитик данных849
  • Системный аналитик148

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

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

По регионам

  • Вакансии в США45 360
  • Вакансии в Европе22 405
  • Вакансии в Канаде4 485
  • Работа в России3 897

По формату

  • Удалённые вакансии75 381
  • Релокация в США45 357
  • Гибридная работа12 010
  • Офисная работа7 029

По уровню

  • Senior вакансии42 335
  • Middle вакансии20 999
  • Junior вакансии6 760

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

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab139 вакансий
  • Celonis40 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 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.