1. JIT と AOT とは何ですか?
JIT、Just-in-time、動的 (ジャストインタイム) コンパイル、実行中のコンパイル、AOT、Ahead Of Time、実行前のコンパイルを指し、プログラムをコンパイルする 2 つの方法
2、メリットとデメリット
JIT の利点:
① 現在のハードウェア条件に応じてリアルタイムで最適な機械命令をコンパイルして生成できます (ps. AOT も可能で、ユーザーはバイトコードを使用してマシン条件に応じて一度コンパイルします) ② ハードウェア条件に応じて最適な機械命令を生成できます現在のプログラムの実行
条件 機械語命令シーケンス
③ プログラムが動的リンクをサポートする必要がある場合、JIT のみを使用できます。
④ プロセス内のメモリの実際の状況に応じてコードを調整できるため、メモリをより完全に利用できます。
JIT の欠点:
①コンパイルはランタイムリソースを占有する必要があり、プロセスがフリーズする
②コンパイル時間はランタイムを占有する必要があるため、一部のコードのコンパイル最適化を完全にはサポートできず、プログラムのスムーズさとコンパイル時間の間でトレードオフを行う必要がある③コンパイルの準備と識別時 よく使われる方法は時間が
かかり、最初のコンパイルでは最大のパフォーマンスが得られない
AOT の利点:
① プログラムの実行前にコンパイルすることで、実行時のコンパイルパフォーマンスの消費とメモリの消費を回避できます。
② プログラムの実行初期段階で最高のパフォーマンスを実現できます。
③ プログラムの起動を大幅に高速化できます。
AOT の欠点:
①プログラムを実行する前にコンパイルすると、プログラムのインストール時間が長くなります。
②Java の一貫性が犠牲に
なります。 ③事前にコンパイルした内容を保存すると、より多くの外部リソースが必要になります。
3、団結に関連する
1. JIT & モノラルコンピレーション
Unity のクロスプラットフォーム テクノロジーは、Mono 仮想マシンを通じて実現されます。また、この仮想マシンは更新が遅すぎるため、多くのプラットフォームにうまく適応できません。
Android は次を生成します:
\assets\bin\Data\Manated\ Assembly-CSharp.dll (実行時に呼び出されるゲームの制御ロジック)
\lib\armeabi-v7a\ libmono.so、libmain.so、libunity.so (libmono.so で mono VM の機能が完成します)
2. AOT および IL2CPP のコンパイル
Unity社はIL2cppを自社開発しており、mono仮想マシン上で実行されるはずだった中間コードをcppコードに変換し、c++のクロスプラットフォーム機能を利用して各プラットフォームで生成されたcppコードを各プラットフォームに変換します
。効率と互換性を高めるために、適切に最適化されたネイティブ C++ コンパイラーでコンパイルされています。
ネイティブコンパイラとは何ですか? クロスコンパイラとは何ですか?
Android は次を生成します:
\assets\bin\Data\Manated\ Assembly-CSharp.dll は通常、apk にパッケージ化されません (ゲームの制御ロジックは中間ファイルとしてのみ保存され、実行時に呼び出されません)
\lib\armeabi-v7a\ libil2cpp.so、libmain.so、libunity.so (libil2cpp.so にはゲーム制御用のネイティブ コードと IL2CPP VM 関数が含まれています)
3. Mono に対する IL2CPP の利点
①Mono VM はさまざまなプラットフォームに移植され、メンテナンスに非常に時間がかかり、完了できない場合があります。
②Mono バージョンの権限が制限されています。
③動作効率が
向上します。 ④IL2CPP を使用すると、プログラム サイズが比較的小さくなり、動作速度が向上します!
⑤IL2CPPを使用したヒープメモリ割り当てに関してMonoと比較すると、MonoのReserved Totalは増加するだけで減少しませんが、Reserved Totalを削減できます。
関連リンク: https://blog.csdn.net/h1130189083/article/details/78302502
関連リンク: https://www.cnblogs.com/eniac1946/p/7417191.html
関連リンク: https://zhuanlan.zhihu .com/p/19972689