JVMは難しいですか?あるいは、この記事を読んだばかりかもしれません。

JVMは難しいですか?あるいは、この記事を読んだばかりかもしれません。

コンセプト

仮想マシン: 完全なハードウェア システム機能をシミュレートし、完全に分離された環境でソフトウェア方式で実行される完全なコンピュータ システムを指します。これは物理マシンのソフトウェア実装です。一般的に使用される仮想マシンには、VMWare、Visual Box、Java 仮想マシン (Java 仮想マシン、略して JVM) などがあります。

[[270256]]

Java 仮想マシン キャンプ: Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

プロセスを開始する

基本的なアーキテクチャ

Java ランタイムはソース コード (.java) をバイトコードにコンパイルし、それが jre によって実行されます。 jre は Java 仮想マシン (jvm) によって実装されます。 Jvm はバイトコードを分析し、解釈して実行します。


JVM は 3 つの主要なサブシステムで構成されています。

  • 1. クラスローダーサブシステム
  • 2. ランタイムデータ領域(メモリ)
  • 3. 実行エンジン

ガベージコレクション (GC)

1. ゴミを識別し、リサイクル可能かどうかを判断するにはどうすればよいでしょうか?

  • 参照カウント方式: 各オブジェクトにカウンターを追加します。オブジェクトがどこかで参照されると、カウンターは 1 増加し、参照が無効な場合は、カウンターは 1 減少します。オブジェクト カウンターが 0 かどうかは、オブジェクトがリサイクル可能かどうかを判断するために使用されます。欠点: 循環参照の問題を解決できない
  • ルート検索アルゴリズム: 到達可能性分析法とも呼ばれ、"GC ROOTs" オブジェクトを検索開始点として使用し、参照を通じて下方向に検索します。通過するパスは参照チェーンと呼ばれます。オブジェクトがリサイクル可能かどうかは、オブジェクトが参照チェーンへのパスを持っているかどうかによって決まります (GC ルートとして使用できるオブジェクト: 仮想マシン スタックで参照されるオブジェクト、メソッド領域内のクラスの静的属性によって参照されるオブジェクト、メソッド領域内の定数によって参照されるオブジェクト、およびローカル メソッド スタック内の JNI によって参照されるオブジェクト)

2. Java のヒープは、GC がガベージを収集する主な領域です。 GC は、マイナー GC とフル GC (またはメジャー GC) の 2 種類に分けられます。

  • マイナー GC: 若い世代 (Young Gen) のスペースが不足している場合にコレクションがトリガーされます。 Java のほとんどのオブジェクトは通常、長期間存続する必要がないため、若い世代は GC コレクションが頻繁に行われる領域であり、コピー アルゴリズムが使用されます。
  • フル GC: 旧世代 (Old Gen) のスペースが不足している場合、またはメタスペースが最高水準点に達した場合にコレクションが実行されます。大きなオブジェクトや長期間存続するオブジェクトは大量のメモリ空間を占有し、リサイクル効率が低いため、マークスイープアルゴリズムが使用されます。

GCアルゴリズム

リサイクル戦略に応じて、マークスイープアルゴリズム、マークコンパクトアルゴリズム、コピーアルゴリズムに分けられます。

1. マークアンドスイープアルゴリズム:「マーキング」と「スイープ」の 2 つの段階に分かれています。まず、リサイクル可能なオブジェクトをマークし、マークが完了したら、マークされたすべてのオブジェクトが占めるメモリ領域をリサイクルします。デメリット: 1. 循環参照を処理できない 2. 効率が低い 3. 大量のメモリフラグメントが生成される (追記: スペースの断片化が多すぎると、将来大きなオブジェクトを割り当てるときに十分な連続メモリスペースを適用できなくなり、新しいラウンドの GC が事前にトリガーされる可能性があります)


2. マークソートアルゴリズム:「マーキング」と「ソート」の 2 つの段階に分かれています。まず、リサイクルできるものに印を付けます。マークした後、オブジェクトを一方の端に移動し、境界の外側のメモリを直接クリーンアップします。


3. コピーアルゴリズム: メモリ空間を 2 つの等しい領域に分割し、一度に 1 つの領域のみを使用します。 gc 中、現在使用されている領域が走査され、使用中のオブジェクトが別の領域にコピーされます。このアルゴリズムは、使用中のオブジェクトのみを毎回処理するため、コピーコストは比較的小さくなります。同時に、コピー後にメモリを適切にソートできるため、「断片化」の問題は発生しません。デメリット: 1. メモリ使用率の問題 2. オブジェクトの生存率が高い場合、効率が低くなります。


パーティション処理に応じて、増分コレクションアルゴリズム、世代別コレクションアルゴリズムに分けられます。

1. 増分コレクション: リアルタイム ガベージ コレクション アルゴリズム。つまり、アプリケーションの実行中にガベージ コレクションが実行されます。理論的には、従来の生成方法によって発生する問題を解決できます。増分コレクションは、ヒープ領域を一連のメモリ ブロックに分割します。使用する際は、まず一部から使用してください。ガベージコレクションを行う際は、以前使用されていた部分に残っているオブジェクトを、後ろの未使用のスペースに配置します。これにより、従来の生成方法のように、使用がすべて完了した後にリサイクルのために一時停止する状況を回避し、使用しながら収集する効果が得られます。

2. 世代別コレクション: (商用デフォルト) オブジェクトのライフサイクルに基づいて、新世代、旧世代、メタスペースに分割され、異なるライフサイクルで異なるアルゴリズムを使用してオブジェクトをリサイクルします。


システムスレッドに応じて、シリアルコレクションアルゴリズム、並列コレクションアルゴリズム、同時コレクションアルゴリズムに分類できます。

1. シリアルコレクション: 単一のスレッドを使用してガベージコレクション作業を処理します。実装が簡単で、効率が高くなります。デメリット: 1. 複数のプロセッサを活用できない 2. ユーザースレッドを一時停止する必要がある

2. 並列コレクション: マルチスレッドを使用してガベージ コレクション作業を高速かつ効率的に処理します。理論的には、CPU の数が多いほど、並列コレクターが発揮できる利点は多くなります。デメリット: ユーザースレッドを一時停止する必要がある

3. 同時収集: ガベージ スレッドとユーザー スレッドが同時に動作します。システムはガベージコレクション中にユーザースレッドを一時停止する必要がない

GCコレクターの一般的な組み合わせ



JVM パフォーマンス チューニングのアイデア


GCログを理解する


  1. [GC [PSYoungGen: 8192K->1000K(9216K)] 16004K->14604K(29696K), 0.0317424 秒] [時間:ユーザー=0.06 システム =0.00、実数=0.03 秒]
  2. [GC [PSYoungGen: 9192K->1016K(9216K)] 22796K->20780K(29696K), 0.0314567 秒] [時間:ユーザー=0.06 システム =0.00、実数=0.03 秒]
  3. [フルGC [PSYoungGen: 8192K->8192K(9216K)] [ParOldGen: 20435K->20435K(20480K)] 28627K->28627K(29696K)、[メタスペース: 8469K->8469K(1056768K)​​]、0.1307495 秒] [時間:ユーザー=0.50、システム =0.00、=0.13 秒]
  4. [フルGC [PSYoungGen: 8192K->8192K(9216K)] [ParOldGen: 20437K->20437K(20480K)] 28629K->28629K(29696K)、[メタスペース: 8469K->8469K(1056768K)​​]、0.1240311 秒] [時間:ユーザー=0.42、システム =0.00、=0.12 秒]

一般的な異常

  • StackOverflowError: (スタックオーバーフロー)
  • OutOfMemoryError: Java ヒープ スペース (ヒープ スペースが不足しています)
  • OutOfMemoryError: GC オーバーヘッド制限を超えました (GC に 98% 以上の時間がかかり、GC によって回復されたメモリは 2% 未満でした)

<<:  調査レポート: パブリッククラウドストレージはお金の無駄

>>:  QingCloud KubeSphere(QKE)は、基盤となる運用やメンテナンスを必要とせず、よりシンプルで使いやすいです。

推薦する

Weiboのマーケティングコンテンツはこのように扱う必要がある

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス1. コンテンツは We...

面接でよく聞かれる JVM の重要なポイントは何ですか?

この記事はWeChatの公開アカウント「Java Geek Technology」から転載したもので...

Docker に関するこの質問についてご存じないかもしれません。

みなさんこんにちは、私はpshuです。本日の Coder English Class の第 6 回目...

Aibang.comとDianping.comについての私の意見

Baidu が Aibang.com を買収すると聞いてショックを受けました。驚き、残念に思いました...

ダブル11を勝ち取るためのライブストリーミング販売

平日は一番静かなライブ配信販売グループも、10月からはすごく賑やかになってきました。李佳琦のライブ放...

ウェブサイト最適化戦略: 知っておくべき 7 つの SEO のヒント

SEO 担当者として、新しいウェブサイトを頻繁に引き継ぐのはよくあることです。新しいウェブサイトの場...

個人ウェブマスター向けブランドポジショニングマーケティングの簡単な分析

ここ数日、ポジショニングについて学んできました。今日は、個人ウェブマスターがそれぞれの分野でポジショ...

SEOには情熱とユーモアが必要

SEO は本当に退屈なので、多くの初心者にとっては耐えられないものになります。現在外部リンクを投稿し...

2021年、中国の基礎クラウドサービス産業の市場規模は2,256億元に達した

今年、国内クラウドサービス市場規模は2,256億元と過去最高を記録した。感染症の流行によりオフライン...

テンセントの「デジタルエコシステム展」が本日春城に上陸し、業界と消費者のインターネットの「ブラックテクノロジー」をすべて展示した。

2019年テンセントグローバルデジタルエコシステムカンファレンスの重要な一環として、「デジタルエコシ...

Tektonシリーズの実用記事 私の最初のパイプライン

上記ではTektonのインストールと理論的知識を紹介しました。この記事を注意深く読めば、何か得られる...

敦煌ドットコム 王淑同:小さなウェディングドレスの対外貿易電子商取引チャネルの台頭の歴史「シンプルであればあるほど良い」

少し前に、ウエディングドレスの海外取引を行っている電子商取引会社が、その成功体験をシェアしているとい...

ページの品質は直帰率だけで判断できない理由について簡単に説明します。

多くのウェブマスターの友人は、最適化に取り組み始めると、ユーザーフレンドリーなエクスペリエンスやペー...

2024 年にクラウド ネイティブ アーキテクチャに必要なテクノロジー スタックは何ですか?

背景時は経つのは早いもので、もう2024年です。2015年に就職したばかりの頃は、SSM/H(Spr...

#BlackFriday# limewave: 米国シアトルの VPS、年間 15 ドル、2G メモリ/2 コア (Ryzen)/30gSSD/10T トラフィック/1Gbps 帯域幅

Limewave は特別なブラックフライデー イベントを開始しました。2G メモリ、2 コア (RY...