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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 728
  • Облачные технологии6 606
  • QA вакансии2 165
  • Android1 317
  • Инженер данных878
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 210
  • AI вакансии545
  • Fullstack вакансии500
  • Frontend вакансии422
  • Mobile вакансии28

По стеку

  • Go5 192
  • Java3 112
  • Kotlin1 085
  • Node.js992
  • Rust846
  • .NET660
  • PHP319
  • C++266
  • C#208

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

  • Kubernetes3 904
  • Linux-инфраструктура2 843
  • DevOps вакансии2 684
  • Terraform / IaC2 162
  • Мониторинг и Observability1 062
  • CI/CD921
  • SRE303
  • Кибербезопасность31

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

  • Аналитик данных537
  • Data Scientist445
  • Бизнес-аналитик402
  • Системный аналитик68

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

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

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

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

Все компании
  • Rakuten189 вакансий
  • Wise186 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

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

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

Что такое сборщик мусора (garbage collector) в Unreal Engine и как предотвратить уничтожение объектов?

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

GC в UE периодически обходит граф UObject-ссылок и уничтожает недостижимые объекты; чтобы объект жил, достаточно иметь UPROPERTY-ссылку на него или вызвать AddToRoot(). Сырые указатели UObject* без UPROPERTY — невидимы GC.

1. UPROPERTY

UCLASS()
class AMyActor : public AActor
{
    GENERATED_BODY()
    UPROPERTY() // без этого макроса MyObject может быть уничтожен GC
    UMyObject* MyObject;
};

Как работает Garbage Collector в Unreal Engine

UE использует трассирующий GC (Mark & Sweep). Раз в несколько секунд (интервал задаётся gc.TimeBetweenPurgingPendingKillObjects) движок обходит все зарегистрированные UObject и помечает достижимые. Объекты без живых ссылок помечаются как PendingKill, а затем физически удаляются в следующем цикле очистки.

Что считается «живой ссылкой»

  • UPROPERTY-поле в UObject — главный способ.
  • Вызов AddToRoot() — добавляет объект в корневой набор, GC никогда его не тронет.
  • Глобальный массив TArray<UObject*> с UPROPERTY.
  • Ownership-иерархия Actor: дочерние компоненты держит Outer.

Что GC не видит

  • Сырой UObject* в обычном поле (без UPROPERTY).
  • std::shared_ptr<UObject*> — UE не знает о STL-умных указателях для UObject.
  • Указатель в локальной переменной функции (стек GC не сканирует).

Инструменты защиты объектов от GC

2. AddToRoot / RemoveFromRoot

UMySubsystem* Subsystem = NewObject<UMySubsystem>();
Subsystem->AddToRoot(); // объект в корневом наборе — GC не трогает
// ... при завершении работы:
Subsystem->RemoveFromRoot();

3. FGCObjectScopeGuard и FGCObject

// Если класс не является UObject, но держит ссылку
class FMyNativeClass : public FGCObject
{
public:
    UTexture2D* CachedTexture = nullptr;

    virtual void AddReferencedObjects(FReferenceCollector& Collector) override
    {
        Collector.AddReferencedObject(CachedTexture);
    }
    virtual FString GetReferencerName() const override
    {
        return TEXT("FMyNativeClass");
    }
};

4. TStrongObjectPtr (UE 5.x)

#include "UObject/StrongObjectPtr.h"

TStrongObjectPtr<UMyObject> StrongRef(NewObject<UMyObject>());
// Объект жив пока StrongRef существует

Проверка валидности перед использованием

// IsValid() проверяет != nullptr && !IsPendingKill()
if (IsValid(MyActorPtr))
{
    MyActorPtr->DoSomething();
}
// TWeakObjectPtr — не продлевает жизнь, но безопасен для проверки
TWeakObjectPtr<AActor> WeakRef = SomeActor;
if (WeakRef.IsValid())
{
    WeakRef->DoSomething();
}

Консольные переменные для диагностики

gc.TimeBetweenPurgingPendingKillObjects 60  // интервал очистки (сек)
gc.MaxObjectsNotConsideredByGC 1             // объектов в «быстром пути»
obj gc                                       // принудительный GC в консоли
obj refs ClassName=MyActor                  // показать все ссылки на объект

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

  • Сырой указатель без UPROPERTY: если забыть макрос — объект уничтожается GC, указатель становится висячим; IsValid() не спасёт (оно вернёт false только если объект стал PendingKill, но не при произвольном висячем указателе).
  • AddToRoot без RemoveFromRoot: утечка памяти — объект никогда не будет освобождён.
  • GC в многопоточном коде: GC может сработать между потоками; нельзя держать UObject* в рабочем потоке без FGCObject.
  • Использование после Destroy(): AActor::Destroy() помечает актора как PendingKill немедленно; после вызова нельзя обращаться к его методам — используйте IsValid().
  • Удержание ссылки на SubObject через внешний массив без UPROPERTY: субобъекты (компоненты, созданные через CreateDefaultSubobject) защищены Outer, но произвольные NewObject без владельца-UObject нуждаются в явной ссылке.
  • Стресс-тест GC: команда obj gc в консоли принудительно запускает GC — полезна для поиска утечек в Development-билде.

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

  • В каких проектах Unreal Engine оправдан, а где он становится источником лишней сложности?
  • Что такое макросы UPROPERTY и UFUNCTION и какие параметры они поддерживают?
  • В чём разница между GameMode, GameState, PlayerController и PlayerState?
  • Как работает система тиков (tick system) в Unreal Engine?

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

  • Объяснять Unreal garbage collector только по синтаксису, без жизненного цикла и стоимости.
  • Игнорировать ошибки, null/empty состояния, порядок инициализации или режим сборки.
  • Давать пример, который работает в демо, но ломается при изменении владельца ресурса.
  • Использовать макросы или specifier-и наугад и забывать про UObject GC.

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

  • Кандидат формулирует точную модель для Unreal garbage collector, а не только определение.
  • Пример компилируем, безопасен по lifetime и соответствует версии технологии.
  • Названы trade-off, ограничения и диагностируемые симптомы ошибки.
  • Понимает границу между C++ кодом, runtime/framework metadata и editor/UI слоем.

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

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

Источники

  • https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-object-handling-in-unreal-engine
  • https://dev.epicgames.com/documentation/en-us/unreal-engine/incremental-garbage-collection-in-unreal-engine
←Предыдущий вопросЧто такое макросы `UPROPERTY` и `UFUNCTION` и какие параметры они поддерживают?Следующий вопрос→В чём разница между GameMode, GameState, PlayerController и PlayerState?

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

Unreal Engineasset-pipelinegameplay-architectureperformance-debugging