ある意味ではpthread_mutex_init
、実際よりも悪いです。Java の待機/通知のため、モニターを実装するには、mutex と条件変数のペアが必要です。
実際には、JVM を実装するときは、本にあるすべてのプラットフォーム固有の最適化を探し出して適用し、いくつかの新しい最適化を発明して、モニターを可能な限り高速にします。本当に恐ろしい仕事をすることができないなら、あなたはガベージコレクションを最適化することができません;-)
1 つの観察結果は、すべてのオブジェクトが独自のモニターを持つ必要があるわけではないということです。現在同期されていないオブジェクトは必要ありません。そのため、JVM はモニターのプールを作成することができ、各オブジェクトはポインター フィールドを持つことができます。これは、スレッドが実際にオブジェクトを同期したいときに (たとえば、プラットフォーム固有のアトミックな比較およびスワップ操作を使用して) 埋められます。したがって、モニターの初期化のコストは、オブジェクト作成のコストに追加する必要はありません。メモリが事前にクリアされていると仮定すると、オブジェクトの作成は次のようになります。ポインターをデクリメントします (さらに、ある種の境界チェック、gc を実行するコードへの予測偽分岐など)。タイプを記入してください。最も派生したコンストラクターを呼び出します。Object のコンストラクターが何もしないように調整できると思いますが、明らかに多くは実装に依存します。
実際には、平均的な Java アプリケーションは一度に非常に多くのオブジェクトを同期するわけではないため、モニター プールは時間とメモリの大幅な最適化になる可能性があります。