この記事では、主に 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. 同期ソリューションがない
ロックの最適化 ロック最適化ソリューションはいくつかあります。
|
<<: エッジ コンピューティングはますます普及していますが、クラウド コンピューティングはどうでしょうか?
ウェブマスターの皆さんは、「The Brain」の第 1 話に Baidu の CEO である Ro...
ウェブサイトの権威が 6 から 0 に落ちるという経験を誰もができるわけではありませんが、その狂気的...
この記事を書いているときに、最初に頭に浮かんだのは、以下の文章をどう書くかではなく、「隋唐英雄伝」の...
広東省高級人民法院の公式微博アカウントによると、福田裁判所は最近、「深センのiPhoneユーザーがA...
photonvpsのトラフィックが33Tにアップグレードされたというニュースを見ました(XENベース...
■ 江東氏(中央)と彼の仲間たちクラスメイトが寮にこもって外出をせず、それでも食べ物を注文したい場合...
文 | CBN記者 ゾウ・トン、インターン記者 ソン・ジン3年前、Hujiang.comの創設者であ...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています2018 ...
ご存知のとおり、プライベート ドメイン トラフィックは比較的広い概念であり、トラフィック キャリアが...
今日は「道元武術」というタイトルで、内部リンク構築の重要性を強調したいと思います。ウェブサイトの構築...
「eコマースのライブストリーミングはテレビショッピングと同じではないのか?」という声をよく聞きます。...
9月22日、Banma Networksはインターネットカー「Banma Smart MARS」の新...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますご存知のよ...
webline-services.com は 2009 年に設立されたホスティング会社です。ニューヨ...
2021年5月28日、中関村デジタル人工知能産業連盟が主導し、51CTOが主催する「クラウドインパク...