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)は、基盤となる運用やメンテナンスを必要とせず、よりシンプルで使いやすいです。

推薦する

Cert Manager を使用して Kubernetes Gateway 証明書を自動的に管理する

背景Kubernetes ゲートウェイおそらく、より正確にはKubernetes Gateway A...

ウェブサイトの「ランキングボトルネック」問題を解決する3つの方法を教えます

SEO の日常業務の目標はランキング 1 位を獲得することであるため、ウェブマスターはウェブサイトの...

エッジコンピューティング市場は、モノのインターネット時代において大きな可能性を秘めている

エッジ コンピューティングとは、ネットワーク、コンピューティング、ストレージ、およびアプリケーション...

より効率的な情報のためのウェブサイトのコピーライティングデザインについての簡単な説明

以前、北京で開催されたインタラクティブ体験デーで、私は新浪のプロダクトマネージャー、李啓明氏の「より...

FINRA CIO スティーブ・ランディッチがパブリッククラウドを推進

世界最大のクラウド サービス消費者の 1 つである米国証券取引委員会 (SEC) 傘下の規制機関であ...

セルフメディアで働く人はQQグループで遊ぶ人ほど優秀ではない:簡単に月に10万元を稼ぐ

時々、私はいくつかのQQグループに引き込まれます。そこでは、服の組み合わせやショッピング体験について...

SEOは長期的なプロセスです

この記事を書くきっかけとなったのは、友人から紹介されたクライアントから昨日電話を受けたことでした。ま...

トランプ氏が大勝利!アメリカ国民を集団的に異常な行動にさせるために、彼はどのようなブランドマーケティング手法を使ったのでしょうか?

先ほど、アメリカの最新選挙結果によりますと、トランプ氏がヒラリー氏を破り、見事にアメリカの新大統領に...

サーバーレスコンピューティングはクラウドネイティブの次の開発方向になりつつある

新しい技術が登場すると、最初に注目を集めるのはその技術的な価値であることが多いです。技術の価値が証明...

Coremail Lunke メールボックス クライアントは、安全な共同オフィス ソリューションを作成します。

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますAI、ビッ...

ウェブマスターが「競争相手」を「ウェブサイト構築のヘルパー」に変える方法の簡単な分析

競争相手は、決して避けられない言葉です。利益を生む業界には、それを推進するさまざまなグループがあり、...

G業界における仮想化ハイパーコンバージェンスアーキテクチャの実践に関する簡単な議論

[[415486]]この記事は張志鋒が執筆したWeChatパブリックアカウント「独特の職人技と効果」...

大規模エリアにおける仮想化コアネットワークの導入に関する議論

NFV テクノロジーは、ネットワーク要素のソフトウェアを基盤となるハードウェアから分離し、VNF の...

モバイルゲームのトラフィックを購入するために使用されるチャネルは何ですか?この記事でわかります!

私は最近2週間かけて全国を旅行し、成都、上海、広州、深セン、厦門、北京の大量購入と流通の友人と多くの...