
1、UE4GCの概要
UE4には、一連のUObjectオブジェクトシステムが構築され、ガベージコレクションメカニズムも追加されました。これにより、ゲーム開発にC ++を使用しやすくなり、ゲーム自体でメモリリークの問題を大幅に回避できます。
UE4は、従来のガベージコレクション方式である「マーク・パージ」というガベージコレクション方式を採用しています。ガベージコレクションは2つの段階に分かれています。第一段階はあるルートコレクションから始まり、到達可能なすべてのオブジェクトをトラバースします。トラバースが完了すると、到達可能なオブジェクトと到達不可能なオブジェクトにマークを付けることができます。このステージは1フレームで完了します。第2段階では、これらの到達不能なオブジェクトを徐々にパージします。到達不能なオブジェクトにはアクセスできないため、一度に多くのUObjectがパージされ(例えば、mapがアンロードされると、明らかなフリーズが発生します。)ないように、フレーム内でパージできます。
GCはゲームスレッドで発生し、UObjectをパージし、マルチスレッドGCをサポートします。
ゲーム内で最大のUObjectオブジェクトを指定するMaxObjectsInGameなど、いくつかのパラメーターをGCに設定できます(エディターでは有効になりません)。モバイルプラットフォームのデフォルト設定は131072です。UObjectの数がこのしきい値を超えると、ゲームがクラッシュします。その他の詳細なパラメーター関連するプロパティは、UGarbageCollectionSettings、GarbageCollection.cpp、およびUnrealEngine.cppで確認できます。
次の図は、マークパージの動作原理を示しています。
1.1GCの開始時期:
UE4のGCは、アクティブトリガーと自動トリガーの2つの方法に分けることができます。
1.1.1アクティブトリガー
ある操作を実行する同時に手動で呼び出せます。例えば、アセットをアンロードするとすぐにGCを呼び出してパージすることができます。
そして、多くの方法があります。例えば、ゲームはForceGarbageCollectionを呼び出して、Worldに次のtickでガベージコレクションを実行させることができます。また、CollectGarbageを直接呼び出すこともできます。エンジンのほとんどの状況は、この方法でアクティブにトリガーされます。
1.1.2自動トリガー
ゲームでは、ほとんどのガベージコレクション操作はUE4によって自動的にトリガーされます。通常の状況では、手動でGCを呼び出す必要はありません。これは、GCを使用するための理想的な方法でもあります。
World tickが発生すると、UEngine::ConditionalCollectGarbage()関数が呼び出され、関数でいくつかの判断が行われます。GC条件が満たされると、GCが実行されます。ConditionalCollectGarbageの実行ロジックを分析してみましょう。
UWA公式サイト:https://jp.uwa4d.com
UWA公式ブログ:https://blog.jp.uwa4d.com
UWA公式Q&Aコミュニティ(中国語注意):https://answer.uwa4d.com
これも興味あるかも
-
原理から応用まで ゲームでの動的解像度
January 4, 2023 -
Unityゲームの使用メモリを最適化しよう
December 21, 2022 -
ASTC テクスチャ圧縮形式の紹介
December 14, 2022