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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 116
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии990
  • AI вакансии951
  • Frontend вакансии749
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

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

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

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

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

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

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

По регионам

  • Вакансии в США44 437
  • Вакансии в Европе23 855
  • Вакансии в Канаде4 483
  • Работа в России3 904

По формату

  • Удалённые вакансии75 212
  • Релокация в США44 436
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • 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