この記事では、主に 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. 同期ソリューションがない
ロックの最適化 ロック最適化ソリューションはいくつかあります。
|
<<: エッジ コンピューティングはますます普及していますが、クラウド コンピューティングはどうでしょうか?
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスプライベートドメイントラ...
以前、私はウェブサイトデザインの観点から Taobao と Paipai を考察した記事を書きました...
文/ジャオジャオインターネットがますます普及するにつれて、私たちの生活のあらゆる側面がインターネット...
チャネル数の増加に伴い、CP の選択肢はますます増えています。しかし、チャネルの品質は多くの CP ...
2018年7月26日、「スマート教育、未来を見据える――JDクラウドスマート教育戦略会議」が北京で成...
ジャック・マー氏が繰り返し強調してきた新小売であれ、馬化騰氏が提唱する産業インターネットであれ、イン...
12月6日、百度はウェブサイトの改訂による軽量化の問題について公式声明を発表した。百度はウェブマスタ...
時代は急速に変化しており、VUCA時代においては不確実性がますます高まっています。現在のデジタル変革...
virpusも老舗のVPS業者です。今回はXENの仮想VPSが全品50%オフ【割引コード: 0713...
SEO を始めた人は誰でも、内部リンクが重要であり、外部リンクが最も重要であるというこの言葉を耳にす...
最近、「江南スタイル」という韓国のヒット曲がインターネット上で急速に人気を集めています。YouTub...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス突然の疫病の発生により、...
[51CTO.comからのオリジナル記事] 数年にわたる発展を経て、わが国の産業インターネット構築は...
昨日の午後、Baidu ビルで、ロビンは Baidu のウェブ検索部門と詳細な意見交換を行いました。...
SEO とは何ですか? 中国語では「検索エンジン最適化」と翻訳されます。SEO を学んでいる多くの友...