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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python6 033
  • Облачные технологии4 127
  • QA вакансии1 598
  • Android1 134
  • Инженер данных767
  • Продакт-менеджер295

Разработка

  • iOS1 084
  • Backend вакансии1 031
  • Fullstack вакансии444
  • AI вакансии385
  • Frontend вакансии371
  • Mobile вакансии27

По стеку

  • Go3 416
  • Java2 070
  • Kotlin926
  • Node.js731
  • Rust514
  • .NET462
  • PHP267
  • C++206
  • C#195

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

  • Kubernetes2 336
  • Linux-инфраструктура1 899
  • DevOps вакансии1 844
  • Terraform / IaC1 428
  • CI/CD848
  • Мониторинг и Observability650
  • SRE220
  • Кибербезопасность35

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

  • Аналитик данных464
  • Data Scientist434
  • Бизнес-аналитик337
  • Системный аналитик48

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

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

По регионам

  • Вакансии в США23 332
  • Вакансии в Европе9 074
  • Работа в России2 931
  • Вакансии в Канаде2 054

По формату

  • Удалённые вакансии40 752
  • Релокация в США23 332
  • Гибридная работа3 446
  • Офисная работа2 568

По уровню

  • Senior вакансии19 645
  • Middle вакансии11 602
  • Junior вакансии3 620

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

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise94 вакансии
  • Infobip28 вакансий
  • Spotify18 вакансий
  • Celonis17 вакансий
  • Darktrace17 вакансий
  • Adyen13 вакансий
  • UiPath13 вакансий

Вакансии из 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 вакансии
  • AI Enablement Lead (GenAI Value Lab) (#5686)
  • Senior Full Stack Mobile Developer (#5704)
  • Middle General QA Engineer (#5796)
  • Full-stack Technical Lead (Java+React) (#5710)
  • Senior Full Stack Engineer (Java, Python, React) (#5444)

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

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