この記事では、主に Java 仮想マシンの最終コンパイル最適化、Java メモリ モデルとスレッド、スレッド セーフティ、ロックの最適化についてまとめます。残りの要約については、「Java 仮想マシン要約パート 1」および「Java 仮想マシン要約パート 2」をクリックしてください。
1. 実行時の最適化 ジャストインタイムコンパイラ ジャストインタイムコンパイラ JIT の役割は、ホットコードをプラットフォーム関連のマシンコードに変換し、最適化することです。仮想マシンに必要な部分ではありません。それはまさに最高の喜びだとしか言いようがありません。 ホットスポットコード ホットスポットコード分類
ホットスポットの検出と判定方法
コンパイルプロセス(クライアントコンパイラ) ***ステージ
フェーズII
フェーズ3
最適化手法 共通部分式の最適化 式 A の結果が計算され、A 内のすべての変数が変更されていない場合、次に A が使用されるときに計算する必要はなく、A の以前の結果が直接取得されます。 配列境界チェックの削除 メソッドのインライン化 脱出分析 エスケープの定義: メソッドで定義された変数は、他のメソッドにパラメーターとして渡されるか (メソッド エスケープ)、クラス変数に割り当てられます (スレッド エスケープ)。 最適化方法: スタック上の割り当て: エスケープされないオブジェクトはヒープではなくスタックに割り当てられます。その後、スタック フレームがポップされたときにオブジェクトが占めるスペースを破棄できるため、ガベージ コレクション システムへの負荷が軽減されます。 同期の削除: 変数がスレッドから逃れないことが確実な場合は、この変数の同期手段を削除できます。 面接官向け Java 仮想マシンの概要 2. Java メモリ モデルとスレッド メモリモデル メモリ モデルについてここまで説明してきましたが、メモリ モデルとは一体何でしょうか? 特定の操作プロトコルの下で特定のメモリまたはキャッシュへの読み取りおよび書き込みアクセスの抽象化。 その機能は、プログラム内の各共有変数のアクセス ルール、つまり変数をメモリに書き込む方法と、メモリから変数を取得する方法を定義することです。 Java メモリ モデルは、メイン メモリと作業メモリに分かれています。すべての変数はメイン メモリに保存され、スレッドにはメイン メモリのコピーである独自の作業メモリがあります。スレッドは作業メモリの読み取りと書き込みのみが可能です。 8つのアトミック操作
揮発性変数の特別なルール volatile の特徴は、この変数の可視性をすべてのスレッドに保証することです。つまり、変数の値が変更されると、他のスレッドはすぐにその変更を知ることができます。通常の変数の値が変更された後は、その値をメイン メモリに書き戻す必要があり、その後、他のスレッドがメイン メモリからデータを読み取ります。揮発性は、メモリバリアを通じて命令の並べ替えを禁止することもできます。一般的に言えば、読み取り操作は通常の変数と同様ですが、書き込み操作は少し遅くなります。 long および double 変数の特別なルール 8 つの操作は一般にアトミックですが、64 ビット データの場合、メモリ モデルにより、volatile によって変更されない 64 ビット データの読み取り操作と書き込み操作を 2 つの 32 ビット操作に分割できます ----> 非アトミック同意 ただし、一般に long と double を volatile として宣言する必要はありません。 優先権の原則
Javaとスレッド Java スレッド クラス API のほとんどはネイティブ メソッドであり、プラットフォームに依存します。 スレッドを実装する3つの方法
スレッドのスケジューリング 共同スケジューリング スレッドの実行時間はスレッド自体によって制御されます。実行が完了すると、システムにスレッドをアクティブに切り替えるように通知され、スレッドが長時間ブロックされる可能性があります。 プリエンプティブスケジューリング システムは時間を割り当てます。スレッドは積極的に時間を放棄することはできますが、積極的に時間を取得することはできません。優先順位を設定することで順序が決まります。 スレッドのステータス
3. スレッドの安全性とロックの最適化 スレッドの安全性の度合いは順番に低下する
スレッドセーフな実装方法 1. 相互排他的な同期 synchronized キーワードは、コード ブロックの前と後にそれぞれ monitorenter 命令と monitorexit 命令を形成します。これら 2 つの命令には参照オブジェクト パラメータが必要です。ロックには同期を実現するためのカウンターがあります。カウンターは、入場時に +1、退場時に -1 になります。スレッドは再入可能であり、他のスレッドはブロックして待機する必要があります。 synchronized の欠点は、Java スレッドがオペレーティング システムにマップされるため、ブロックされたスレッドを起動するにはシステムの支援が必要であり、ユーザー モードからカーネル モードに転送する必要があり、プロセッサ時間が大量に消費されることです。 synchronized と比較した ReentrantLock の利点:
2. 非ブロッキング同期 スレッドのブロックとウェイクアップによって発生するパフォーマンスの問題を解決するには、まず共有データを操作します。競争がなければ成功するでしょう。それ以外の場合は補正します(成功するまで再試行を続けます) 3. 同期ソリューションがない
ロックの最適化 ロック最適化ソリューションはいくつかあります。
|
<<: エッジ コンピューティングはますます普及していますが、クラウド コンピューティングはどうでしょうか?
2013 年 9 月 6 日、Baidu Webmaster Platform Lee は、関連性の...
最近のネットワーク障害は、ウェブマスターにとって厳しい時期だと言えます。私も例外ではありません。私の...
小紅書が「KOL浄化」を開始して以来、その商業収益化の道筋は大きな注目を集めている。トラフィックが集...
エッジ コンピューティングは、都市化の過程における我が国の経済的、社会的発展に大きな影響を与え、大き...
Bilibili(以下、「 Bステーション」と略す)は、過去6か月間で最も注目を集めたインターネット...
11月25日、Sangfor傘下のクラウドコンピューティングブランドであるSangfor Cloud...
道路工事は最も労働集約的で危険な職業の一つです。毎年、交通工事や道路清掃、事故処理などにより交通事故...
2017 年のクラウド コンピューティング市場を振り返ると、この年はクラウド コンピューティングがさ...
一般的に、マルチクラウドに関する議論を推進する力は 2 つあります。組織が必要とするクラウド コンピ...
ネットショップの運営はますます難しくなり、投資も増えていると多くの人が言っています。ネットショップの...
9月17日、2020年雲啓大会の「政府デジタル変革」セッションにおいて、政府業務向けDingTalk...
鋭い武器はその鋭さで知られ、第二に血を流します。武術の世界で最も有名な武器は、龍殺しの剣と天剣です。...
かつては「コンテンツは王、外部リンクは皇帝」という言葉がありました。外部リンクはウェブサイトの重みを...
Softshellweb は台湾の VPS を提供しており、価格設定からすると実際には安価な台湾の ...
今週、OpenStack は 14 番目のバージョンである Newton を正式にリリースしました。...