JVM
ごみコレクタ
ゴミ収集の基礎 主な処理手順:スレッドを立てる→ルートを決定→到達可能オブジェクトグラフを作成→オブジェクトの回収→ヒープ圧縮→ポインタの修復。マーカー→圧縮でメモリ空間を連続化
世代別収集は、異なる物には異なるライフサイクルがあるという事実に基づいています。そのため、ライフサイクルの異なる物体を世代に分け、世代ごとに異なるリサイクルアルゴリズムでゴミ回収を行い、リサイクル効率を向上させます。仕分けアルゴリズム:マーク・ソート・コピー 若い世代のコピーでN回のゴミ回収後も残っているオブジェクトは、古い世代のマークに入れられます 永久世代のリサイクルは、主に非推奨定数と無用なクラスの2つの部分をリサイクルします。
メモリ上のオブジェクトのレイアウト オブジェクト オブジェクト 16バイト マークワード レコードロック情報 GC confidence 8バイト ヘッダ1 タイプポインタ どのクラスを指すか 4バイト ヘッダ2 インスタンスデータ アライメント
型ポインタの圧縮 オブジェクトポインタの圧縮 8バイト→4バイト col tool 印刷メモリレイアウトの状況
同時実行問題の原因:3つの大きな特徴:可視性、原子性、順序性。可視性キャッシュ+複数CPUの同時実行 可視性の問題 原子性とは、CPU内の1つまたは複数の処理の実行が中断されない性質を原子性と呼びます。変更が上書きされる可能性 インストラクションの順序変更
ロックの本質は、スレッドがロックを取得すると、そのスレッドIDをロックオブジェクトのヘッダーに書き込み、ロックの一意性を判断することです。
リソースの保護は同じロックでなければなりません!しかし、無関係なリソースの粒度はどうでしょうか?
synchronizedが静的なメソッドを変更する場合、ロックは現在のクラス・オブジェクトにかかることを示します。静的でないメソッドを変更する場合、ロックは現在のインスタンス・オブジェクト thisにかかることを示します。
通知待ちメカニズム 効率の向上
並行プログラミングの分野では、2つの核となる問題があります。
デッドロックを避けるために、これらの3つの方法を提供する同期されたの欠点を補うために、より安全で堅牢なコードを記述することができます。
アトミック・クラスは、volatile+casの原則に基づいて実装されています。
セマフォは、同期やロックとは対照的に、マルチスレッドの排他問題に使用され、複数のスレッドがクリティカルゾーンにアクセスできるようにします。
同期しているのになぜロックするのか: デッドロックを回避する共有リード
Java 以外のリソースでは、finalize() メソッドを呼び出すタイミングが不確定なため、オブジェクトが到達不能になってから finalize() メソッドが実行されるまでにかかる時間は恣意的に長くなります。finalize()メソッドは、占有しているリソースをタイムリーに取り戻すことができず、リソースが枯渇しているにもかかわらずgcがトリガされない場合があります。
内部クラスのオブジェクトは外部クラスのメンバ変数です。静的でない内部クラスには静的なデータは存在できません 1. 内部クラスと外部クラスはお互いのプライベート領域に簡単にアクセスできます 2. 内部クラスは外部クラスの他の部分から隠れる別のカプセル化です。
メンバーである内部クラスは外部クラスに依存しており、外部クラスが作成された場合にのみ内部クラスを作成できます。
マルチスレッドをシミュレート: thread.sleep(5000) then run multiple times
オブジェクト生成の並行性を考慮すると、1つは同期処理のために同時にメモリ空間のアクションを確保することであり、CASは更新操作の原子性を保証するために失敗リトライメソッドを備えています。