この記事では、主に 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. 同期ソリューションがない
ロックの最適化 ロック最適化ソリューションはいくつかあります。
|
<<: エッジ コンピューティングはますます普及していますが、クラウド コンピューティングはどうでしょうか?
さて、3月8日のニュースです。Brisio Innovations Inc が有名なドメイン名会社 ...
お金を節約し、検索エンジンのランキングを独占するために、一部のウェブマスターは、1つの業界向けに複数...
Bytedynastyは香港データセンターに続き、米国ロサンゼルスのCeraデータセンターでもVPS...
SEOをうまく行うことと運営を成功させることの間には長い道のりがある数日前、Dianshi の友人が...
Quickpacket は創立 14 周年を記念し、プロモーション用に自社専用サーバーを 2 台リリ...
iframe タグについて学んだとき、あまり役に立たないと思ったのを今でも覚えています。その後、しば...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています導入:これ...
dwidc(大王データ)は、今年のダブルイレブン特別プロモーションを開始しました。湖北電信高防御クラ...
【TechWeb Report】昨日、米国の金融ウェブサイトiposcoopによると、Weiboは米...
昨日、Instagram が Facebook に 10 億ドルで売却されたことを知りました。しばら...
ユニクロはただ問題を起こそうとしているだけだと思います! 4月23日、週刊少年ジャンプとコラボしたU...
1995年に設立されたブルガリアの企業itldcは、15のデータセンターの「無制限トラフィックVPS...
ウェブマスターの友人がソーシャル メディア、フォーラム、または電子メール リンクで毎日受ける最も一般...
Hostkvm は韓国のデータセンターで新しい VPS サービスを開始し、30% 割引プロモーション...
編集者注: OpenAI の元研究科学者である Andrej Karpathy 氏は、ディープラーニ...