前回の記事では.Net インタビューの 8 部構成の記事を共有しましたが、多くの友人から回答を求められました。スペースと時間の制限があるため、この記事では最初の 25 の質問に対する答えについて説明します。公開アカウント ( jianghupt )の波に従うことができ、後で共有し続けることができます
一部の AI では、これらの質問に対する答えが得られる場合があります。ただし、この種の質問に対する AI の答えは疑わしいものであり、非常に間違っており、誤解を招くものであることに注意してください。
参考までに、CLR/JIT に関する長年の研究を通じて著者が導き出した結論を以下に示します (漏れがあれば遠慮なく修正してください)。
1.Net GC リサイクル手順
の答え: マーキング、計画、再配置、圧縮、クリーニング
2. 世代間オブジェクト参照とは何ですか?
回答: 異なる世代間のオブジェクト参照。たとえば、第 2 世代のオブジェクトは一時ヒープ オブジェクトを参照します。
3. 文字列はどのヒープに保存されますか
? 答え: .Net7 は GC ヒープ内にあり、.Net8 は GC ヒープの外にあります。
4. ルート オブジェクトとは何ですか? それを解放する方法は何ですか
? 回答: ローカル参照変数は通常、コンパイラによって解放されます。
5. 固定オブジェクトの意味
回答: アンマネージ オブジェクトのハンドルは、GC ヒープ内の GC によって移動されません。
6. 強参照ハンドル、弱参照ハンドルについて説明します
回答: 強参照ハンドルで示されるオブジェクトは再利用できませんが、弱参照ハンドルで示されるオブジェクトは再利用できます。
7. デストラクターはどのように実行されますか?
回答: デストラクター スレッドはカーネル オブジェクトを通じて通知を受け、デストラクター リスト ヒープ (FinalizerListSeg) またはキー デストラクター リスト ヒープ内のデストラクターを含むオブジェクトを取り出し、デストラクターを実行します。
8. GC によりアップグレードが可能になるのはいつですか?
回答: 第 2 世代 GC リサイクルを実行するとき
9. GC 計画段階ではバイナリ ツリーはどのように構築されますか?
回答: バイナリ ツリーの頂点とリーフ ノードの構築は、主に奇数と偶数によって決まります。
10. GC はどのようにしてオブジェクトを生存としてマークしますか?
回答: JIT コンパイル GCInfo を通じてルート オブジェクトを保存し、GC 中にルート オブジェクトを再帰的に削除します。
11. GC はターゲット世代をどのように再決定しますか
? 回答: しきい値を使い果たした場合、または低遅延が必要な場合
12. GC を実行するスレッドにはいくつかの種類があります。
答えは、バックグラウンド スレッド、ワークステーション スレッド、サーバー スレッドの 3 つです。
13. 全体的な GC プロセス
答え: 他のスレッドを停止し、リサイクルのターゲット世代を決定し (マーキング、計画、再配置、圧縮、クリーニング)、終了します。
14. 割り当てられたしきい値の計算
答え: 係数と断片化率による計算ですが、非常に複雑です。計算式は後ほど記載します。
15. 小さいオブジェクトの割り当てと大きいオブジェクトの割り当ての違いは何ですか
? 回答: 割り当てられる領域のサイズには大きな違いがあり、制限は 85000 バイトです。
16.新しいキーワードはどのようにオブジェクトを割り当てますか?
回答: コンテキストを割り当てることによって、または API を通じて、高速と低速に分けて割り当てます。
17. 世代別実装のプロセス
回答: 各 CPU コアは、3 つのスモール オブジェクト世代 (0、1、2) と 1 つのラージ オブジェクト世代 (2) の 4 つの世代に分割されます。
18. マネージド ヒープ、ヒープ セグメント、領域、割り当てコンテキストとは何ですか?
回答: ストレージに割り当てられたオブジェクト、CPU コアのメモリ分割、CPU コアのメモリ、および割り当てられたオブジェクトへのポインタ。
19. 関数メモリ モデル
答え: 主に 5 つあります。
MethodTable、MethodDesc、PreCode、Fixup、MethodDesChunk
20.AOT コンパイルプロセス
回答: ILC を通じてソース コードをターゲット ファイルにコンパイルし、llvm バックエンドを通じてターゲット ファイルをリンクし、ターゲット マシンの実行可能ファイルを生成します。
21.ILC とは何ですか?
答え: AOT コンパイラ
21. 生存マークと固定マークはどこに、どのビットに格納されますか
? 回答: それらは MT (タイプ情報) に格納され、それぞれ最後のビットと上位 3 ビットに分割されます。
22. 型情報(MT)、オブジェクトヘッダ(ObjHeader)とその機能
回答: MTは主にどのオブジェクトであるかを区別するために使用され、Objheaderは主にスレッドの同期などに使用されます。
23. ヒープ領域とスタック領域の違い 回答
: ヒープは手動で解放する必要がありますが、スタックはコンパイラによって自動的に解放されます。
24. 遅延モード、GC モード、予約ヒープ スペース アドレスはどのように GC を最適化しますか?
回答: 主に CLR の GC メカニズムを通じて、最適化するかどうかを環境変数で制御できます。
25. JIT の IR とは何ですか?
回答: 中間表現、主に JIT の MSIL とマシン コードの間のコード層
著者:江胡 解説。
元のアドレス: .Net インタビュー 8 部構成のエッセイの質問と回答の共有
OpenAI が ChatGPT Voice Vite 5 をすべてのユーザーに無料で公開、正式にリリース オペレーターの魔法の操作: バックグラウンドでネットワークを切断、ブロードバンド アカウントを非アクティブ化、ユーザーに光モデムの変更を強制 Microsoft オープン ソースの ターミナル チャット プログラマーが ETC 残高を改ざんし、年間 260 万元以上を横領 Redis の父が使用する Pure C 言語コードは、Telegram Bot フレームワークを実装しています あなたがオープンソース プロジェクトのメンテナである場合、この種の返答にどこまで耐えることができますか? Microsoft Copilot Web AI は 12 月 1 日に正式にリリースされ、中国の OpenAI をサポートします 元 CEO 兼社長の Sam Altman 氏と Greg Brockman 氏が Microsoft に加わりました Broadcom は VMware の買収に成功したと発表しました