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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python5 436
  • Облачные технологии4 071
  • QA вакансии1 587
  • Android1 093
  • Инженер данных782
  • Продакт-менеджер310

Разработка

  • iOS1 047
  • Backend вакансии986
  • Fullstack вакансии437
  • Frontend вакансии354
  • AI вакансии350
  • Mobile вакансии27

По стеку

  • Go2 987
  • Java1 810
  • Kotlin868
  • Node.js675
  • .NET436
  • Rust435
  • PHP248
  • C++204
  • C#190

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

  • Kubernetes2 306
  • Linux-инфраструктура1 890
  • DevOps вакансии1 675
  • Terraform / IaC1 405
  • CI/CD841
  • Мониторинг и Observability645
  • SRE217
  • Кибербезопасность46

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

  • Аналитик данных476
  • Data Scientist450
  • Бизнес-аналитик341
  • Системный аналитик48

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

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

По регионам

  • Вакансии в США23 809
  • Вакансии в Европе9 134
  • Работа в России2 924
  • Вакансии в Канаде2 119

По формату

  • Удалённые вакансии41 654
  • Релокация в США23 809
  • Гибридная работа3 374
  • Офисная работа2 525

По уровню

  • Senior вакансии20 056
  • Middle вакансии11 874
  • Junior вакансии3 682

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

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise71 вакансия
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify14 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий
  • Adyen8 вакансий

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

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

Что такое soft, weak и phantom references в Java?

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

SoftReference удерживает объект до нехватки памяти (кеши), WeakReference не мешает GC (WeakHashMap, listeners), PhantomReference позволяет выполнить cleanup после финализации — объект уже недостижим, но ещё не освобождён.

SoftReference

GC собирает soft-объекты только при нехватке памяти (перед OutOfMemoryError). Идеальны для memory-sensitive кешей.

import java.lang.ref.SoftReference;

SoftReference<byte[]> cache = new SoftReference<>(new byte[1024 * 1024]);

byte[] data = cache.get(); // null, если GC уже собрал
if (data == null) {
    data = loadFromDisk();
    cache = new SoftReference<>(data);
}

Иерархия ссылок в Java

Все четыре типа находятся в пакете java.lang.ref. Сильная (strong) ссылка — обычная переменная; три остальных типа позволяют GC собирать объекты в разных сценариях.

WeakReference

GC собирает weak-объекты при первой возможности, если на них нет сильных ссылок. Применяются в WeakHashMap, кешах метаданных, listener-реестрах без утечки памяти.

import java.lang.ref.WeakReference;

WeakReference<ExpensiveObject> weakRef = new WeakReference<>(new ExpensiveObject());

// После следующего GC weakRef.get() может вернуть null
ExpensiveObject obj = weakRef.get();
if (obj != null) {
    obj.doWork();
}

Пример реестра слушателей без утечки:

Map<Listener, Boolean> listeners = new WeakHashMap<>();
listeners.put(myListener, Boolean.TRUE);
// Когда myListener не имеет других сильных ссылок, запись автоматически удаляется

PhantomReference

PhantomReference.get() всегда возвращает null. Объект помещается в ReferenceQueue после финализации, но до освобождения памяти. Используется для детерминированного cleanup ресурсов (альтернатива finalize()).

import java.lang.ref.*;

ReferenceQueue<Resource> queue = new ReferenceQueue<>();
Resource resource = new Resource();
PhantomReference<Resource> phantom = new PhantomReference<>(resource, queue);

resource = null; // убираем сильную ссылку

// В отдельном потоке мониторинга:
Reference<?> ref = queue.remove(); // блокирует до постановки в очередь
if (ref == phantom) {
    cleanupNativeResources();
}

Сравнение поведения

  • Strong: объект живёт, пока есть хоть одна сильная ссылка.
  • Soft: GC собирает при -Xmx pressure; JVM гарантирует очистку до OOM.
  • Weak: GC собирает в ближайший цикл без strong-ссылок.
  • Phantom: get() == null всегда; уведомление через ReferenceQueue после финализации.

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

  • SoftReference и производительность: JVM по умолчанию держит soft-ссылки до 1 секунды на каждый МБ свободной кучи (-XX:SoftRefLRUPolicyMSPerMB). На серверах с большой кучей кеш может занимать гигабайты.
  • WeakHashMap и ключи: ключи WeakHashMap слабо ссылаются, но значения — сильно. Если значение ссылается на ключ, утечка памяти не устраняется.
  • Финализаторы и PhantomReference: если у объекта есть finalize(), он может «воскреснуть» (resurrect), создав новую сильную ссылку. PhantomReference ставится в очередь уже после финализации.
  • ReferenceQueue обязателен для PhantomReference: создание PhantomReference без очереди бессмысленно — get() всегда null, и отслеживать освобождение невозможно.
  • Не используйте finalize(): метод устарел в Java 9, удалён в Java 18+. Для cleanup используйте Cleaner (Java 9+) поверх PhantomReference.
  • Cleaner API как правильная альтернатива: java.lang.ref.Cleaner инкапсулирует PhantomReference + ReferenceQueue и запускает действие в выделенном потоке.
  • Производительность GC: большое количество Reference-объектов замедляет GC — он вынужден обрабатывать reference queues на каждом цикле.

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

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

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

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

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

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

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

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

Источники

  • https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/ref/package-summary.html

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

Javabackend-designtechnical-communication