なぜオブジェクトヘッダーが64ビットアプリケーションで2倍大きくなったのか分かりません。 オブジェクトヘッダーは8バイトで、64ビットでは16バイトです。これらの追加バイトは何のために使用されますか?64ビットアーキテクチャでオブジェクトヘッダーサイズが倍増したのはなぜですか?
答えて
オブジェクトヘッダーは、syncblkとメソッドテーブルポインタ(別名「タイプハンドル」)の2つのフィールドで構成されています。 2番目のフィールドはわかりやすいので、それはポインタですは、は64ビットモードで4から8バイトに増加する必要があります。
syncblkのほうがはるかに明白ではなく、フラグと値(ロック所有者スレッドID、ハッシュコード、同期ブロックインデックス)が混在しています。 64ビットモードでそれを大きくする理由はありません。重要なことは、の後にの後にオブジェクトがGCによって収集されることです。ヒープを圧縮することによって空きスペースがなくならなかった場合、オブジェクト・スペースはフリー・ブロック・リストに参加します。二重リンクリストのように機能します。第2のフィールドは、次の空きブロックへの順方向ポインタである。オブジェクトデータスペースは空きブロックのサイズを格納するために使用され、オブジェクトが決して12バイト未満でない基本的な理由があります。また、syncblkは、前の空きブロックにバックポインタを格納します。今はポインタを格納するのに十分な大きさでなければならず、したがって8バイトに成長する必要があります。したがって、8 + 8 = 16バイトです。
Fwiwでは、64ビットモードの最小オブジェクトサイズは24バイトですが、8 + 8 + 4 = 20バイトはすべてうまくいくはずですが、すべてが8に揃っていることを保証します。 L1キャッシュ・ラインにまたがってポインタ値を持つことは決して望ましくありません。約3倍速くアクセスします。 <gcAllowVeryLargeObjects>
オプションは後で追加される別の理由です。
ありがとう、答えは非常に説明的です。 –
- 1. 64ビットアーキテクチャでvalgrindが32 Gbに制限されるのはなぜですか?
- 2. アクセスは38のクエリカウントに倍増します...なぜですか?
- 3. 64ビットアーキテクチャでのCの問題:pthread_kill()
- 4. 32ビットアーキテクチャの64ビットオペランドでの操作?
- 5. は、だから私は、ローカルに64ビットのApache/PHPをインストールしたWAMP 64ビットアーキテクチャ
- 6. 64ビットアーキテクチャの32ビットOS
- 7. NSIntegerとiOS上の64ビットアーキテクチャ
- 8. 64ビットアーキテクチャの最適化
- 9. 64ビットアーキテクチャ上のJniのポインタサイズは何ですか
- 10. CSSで「繰り返し」を使用した後にnavbarが倍増するのはなぜですか?
- 11. iPadピクセル倍増ですか?
- 12. Arraylistがjtableディスプレイで倍増
- 13. JsonAnyGetter/JsonAnySetter得JSONが倍増した値
- 14. Chocolatey - このパッケージは64ビットアーキテクチャをサポートしていません
- 15. AFNetworking - この64ビットライブラリを32ビットアーキテクチャで簡単に使用できますか?
- 16. 私のフォークプログラムは、フォークごとにサイズが倍増するのはなぜですか?
- 17. なぜretainCountが増えましたか?
- 18. アンドロイドグラフィックスペイントが1.5倍の倍率を持つのはなぜですか?
- 19. ブローフィッシュブロックサイズ64ビット - 入力が64ビットの倍数でない場合の対処
- 20. iPadのヘッダーが倍増
- 21. Cout降順で倍増C++
- 22. OS X上のmatplotlibのインストールでは64ビットアーキテクチャはサポートされません
- 23. Expression Encoder - ファイルディメンションの制限 - 最小サイズは64 * 64で、4の倍数でなければなりませんか?
- 24. "grep --ignore-case"が50倍遅いのはなぜですか?
- 25. 倍増ドメイン
- 26. 履歴ブラウザが倍増
- 27. ブートストラップのドロップダウンで倍増しますか? [OK]を一つ
- 28. 進捗バーが正しく増加しないのはなぜですか?
- 29. 次のCコードで私のWordsize 64ビットはなぜですか?
- 30. データの行が1行しかないのにSQL SUMが倍増する
https://codeblog.jonskeet.uk/2011/04/05/of-memory-and-strings/ –
[.NETオブジェクトのメモリオーバーヘッドとは何か](http: //stackoverflow.com/questions/10655829/what-is-the-memory-overhead-of-a-net-object) –