Javaでは、整数や参照などの基本的な型を除き、すべてのオブジェクトはスタック領域ではなくヒープ領域に配置されます。この設計により、プログラマは変数のライフサイクルに注意を払う必要がなくなりますが、その代わりに、より多くのガベージが生成されます。
到達可能性
ポインターを逆参照することによってプログラムから直接アクセスできるデータは到達可能です。
局所性の原理
プログラムの保存場所が短期間に再度アクセスされる可能性がある場合、そのプログラムには時間的局所性があると言われます。アクセスされたメモリ位置の近くの位置が短期間内にアクセスされる可能性が高い場合、プログラムは空間的に局所化されています。
一般に、プログラムはコードの 10% の実行に時間の 90% を費やすと考えられています。
いくつかのガベージコレクターの原理
マークスイープコレクター
このコレクターは、最初にオブジェクトグラフを走査して、到達可能なオブジェクトをマークし、次にマークされていないオブジェクトのスタックをスキャンして、それらのメモリを解放します。このタイプのコレクターは通常、単一のスレッドを使用して動作し、他の操作を停止します。さらに、マークされたオブジェクトを圧縮せずにマークされていないオブジェクトのみをクリアするため、大量のメモリの断片化が発生し、メモリが浪費されます。
マーク-コンパクト コレクター
マーク-スイープ-コンパクト コレクターとも呼ばれ、マーク-スイープ コレクターと同じマーキング フェーズを持ちます。第 2 フェーズでは、スタックを圧縮するために、マークされたオブジェクトがスタックの新しい領域にコピーされます。このコレクターは他の操作も停止します。
Copying Collector
このコレクターは、スタックを 2 つのドメイン (通常はハーフスペースと呼ばれます) に分割します。毎回スペースの半分だけが使用され、JVM によって生成された新しいオブジェクトはスペースの残りの半分に配置されます。 GC が実行されると、到達可能なオブジェクトがスペースの残りの半分にコピーされ、スタックが圧縮されます。この方法は、存続期間の短いオブジェクトに適しています。存続期間の長いオブジェクトを継続的にコピーすると、効率が低下します。また、特定のサイズのヒープの場合、常に半分しか使用されないため、2 倍の量のメモリが必要になります。
インクリメンタルコレクター
インクリメンタルコレクターは、スタックを複数のドメインに分割し、一度に1つのドメインからのみガベージを収集します。スタックを細かく分割し、特定のブロックからのみガベージを収集すると理解することもできます。ガベージコレクションを一度に実行します。これにより、アプリケーションの中断時間が短くなるため、ユーザーは通常、ガベージ コレクターが動作していることに気づきません。
部分リサイクルの原則
通常、新しく割り当てられたオブジェクトの 80% ~ 90% は数百万命令以内にあるか、再割り当てされています。
世代別ゴミ回収
コピーコレクターと部分リサイクルの原則に基づいています。
ほとんどのオブジェクトの「若くして死ぬ」特性を利用する効果的な方法。
ヒープを一連の小さな領域に分割し、0、1、2...n の番号を付けます。番号が小さいほど、その領域に格納されるオブジェクトは最初に 0 領域に作成され、埋められます。ガベージ コレクションが完了すると、到達可能なオブジェクトはエリア 1 に移動されます。ガベージ コレクションの各ラウンドは、i 以下のシリアル番号を持つエリアで実行されます (i は、現在埋められているエリアの最大番号です)。
i がリサイクルされている限り、シリアル番号 Xiaoyu i を持つすべてのエリアもガベージ コレクションの対象になります。これは、若い世代ほどゴミが多くなる傾向があり、より頻繁にリサイクルされることを意味します。
最も古い世代は最も成熟したオブジェクトを保存し、これらのオブジェクトのリサイクルは最も高価であり、完全なリサイクルに相当します。一時停止が長くなる可能性があります。解決策は、トレーニング アルゴリズムを使用することです。
HotSpot の 4 つの GC コレクター:
シリアル コレクター:
特徴: リサイクル中はアプリケーションが一時停止されます。
ヤング エリア: Survivor エリア内の Eden および生存オブジェクトを別の Survivor エリアにコピーします (TO に設定) (大きなオブジェクトは直接配置されます)。 TO 領域がいっぱいの場合は、古い領域に直接コピーされます。
古い領域: マーク-スイープ-コンパクト GC アルゴリズムを使用します。つまり、最初に残っているオブジェクトをマークし、次にそれらをクリアします。オブジェクトを削除し、残っているすべてのオブジェクトを領域に移動して、より大きな空き領域を解放します。
適用範囲: ほとんどのクライアント アプリケーションは、このリサイクル アルゴリズムを使用できます。これは、現在のマシンのデフォルトのリサイクル アルゴリズムでもあります (2006)。最後の 64MB 領域の完全な回復には 0.5 秒もかかりませんでした。
並列回復並列コレクター:
機能: マルチコア CPU を利用できます。
若い領域: アプリケーションはまだ一時停止する必要があります。基本的なメカニズムは次のとおりです。
シリアル化ですが、マルチスレッドを使用すると効率が向上します。
マルチコア コンピューターで使用できます。
並列圧縮コレクター:
並列リサイクルと比較して、主に古い領域に新しいアルゴリズムがあります。同時に、ホワイトペーパーによれば、この種のリサイクルは最終的に並列リサイクルに置き換わります。
若い領域: 並列リサイクルと同じです。
古い領域: まず、古い領域を複数の連続した領域に分割し、各領域を並行してチェックし、生きているオブジェクトをマークします (最初に直接参照できるオブジェクトをマークし、次にこれらの領域をすべてチェックします)。密度の低い領域から順に密度の度合い(左側の領域が右側の領域より確実に密である)を決定し、右側の領域を並列に圧縮します。
適応範囲: マルチコア用。ただし、共有率が高い (つまり、1 台のサーバーで複数のアプリケーションを実行している) サーバーの場合は、古いファイルが収集されるため、一時停止時間が必要な環境では、並列圧縮とリサイクルを使用する方が適しています。この領域は低速でマルチスレッドであるため、1 つのアプリケーションの GC は他のアプリケーションに影響を与えます。対応する解決策:
同時マーク スイープ コレクター:
若い領域:
古い領域: 分割 いくつかの手順があります。
Initialmark: GC を実行する必要がある場合、最初にアプリケーションを一時停止し、次に直接参照されているすべてのオブジェクトをマークします。
Concurrentmark: その後、アプリケーションを続行し、マークされたオブジェクトを確認します。同時にすべての生き残ったオブジェクトを取得します。
注釈: アプリケーションを再度一時停止し、同時マーク期間中にアプリケーションによって変更されたオブジェクト (新規、破棄) を確認し、生き残ったオブジェクトをマークします。このフェーズは長時間続きます。終了後のフェーズでは、すべての生きているオブジェクトがマークされ、マークされていないオブジェクトはガベージ オブジェクトになります。
第 1 章: 圧縮は実行されません。ただし、将来のメモリ要件を計算することにより、特定のメモリ ブロックがマージ/分割されます。
第 2 章: 古い領域がいっぱいになるまで GC は実行されませんが、スペースが空になったときに開始されます。
2 番目の 3: 圧縮が実行されないため、断片化が発生します。
さらに、CMS は、Concurrentmark ステージで一部の作業のみを実行することもできます。リソースをアプリケーションに返します。この部分は、若い領域のリサイクルの 2 つのアイドル フェーズで完了するように構成されています。通常、このモードは、一時停止時間とプロセッサ数の要件がある場合に使用されます。
一般に、並列処理は、リサイクルと比較して、古い GC の一時停止時間を短縮し (効果が顕著になる場合もあります)、若い GC の時間をわずかに延長します (時間がかかるため)。オブジェクトが若い領域から古い領域に移動するのに時間がかかります。圧縮は実行されないため、最初に適切な領域を見つける必要があります)。これにより、システム全体の実行効率が低下し、メモリ領域の需要が大幅に増加します。
以上がJava におけるいくつかのガベージ コレクション原則の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

bytecodeachievesplatformedentencedexedectedbyavirtualMachine(VM)、forexApplev.forexample、javabytecodecanrunrunrunnonydevicewithajvm、writeonce、runany "ferfuctionality.whilebytecodeOffersenhの可能性を承認します

Javaは100%のプラットフォームの独立性を達成することはできませんが、そのプラットフォームの独立性はJVMとBytecodeを通じて実装され、コードが異なるプラットフォームで実行されるようにします。具体的な実装には、次のものが含まれます。1。bytecodeへのコンパイル。 2。JVMの解釈と実行。 3。標準ライブラリの一貫性。ただし、JVMの実装の違い、オペレーティングシステムとハードウェアの違い、およびサードパーティライブラリの互換性は、プラットフォームの独立性に影響を与える可能性があります。

Javaは、「Write onse、Averywhere」を通じてプラットフォームの独立性を実現し、コードの保守性を向上させます。 2。メンテナンスコストが低いため、1つの変更のみが必要です。 3.チームのコラボレーション効率が高く、知識共有に便利です。

新しいプラットフォームでJVMを作成することに直面する主な課題には、ハードウェアの互換性、オペレーティングシステムの互換性、パフォーマンスの最適化が含まれます。 1。ハードウェア互換性:JVMがRISC-Vなどの新しいプラットフォームのプロセッサ命令セットを正しく使用できるようにする必要があります。 2。オペレーティングシステムの互換性:JVMは、Linuxなどの新しいプラットフォームのシステムAPIを正しく呼び出す必要があります。 3。パフォーマンスの最適化:パフォーマンステストとチューニングが必要であり、ガベージコレクション戦略が新しいプラットフォームのメモリ特性に適応するように調整されます。

javafxefcectivelyaddressessessistencisingisingidevidementsyusaplatform-agnosticscenegraphandcssstyling.1)itabstractsplatformspificsthroughascenegraph、Assuring-sunsinstentrenderingacrosswindows、macos、andlinux.2)

JVMは、Javaコードをマシンコードに変換し、リソースを管理することで機能します。 1)クラスの読み込み:.classファイルをメモリにロードします。 2)ランタイムデータ領域:メモリ領域を管理します。 3)実行エンジン:実行バイトコードを解釈またはコンパイルします。 4)ローカルメソッドインターフェイス:JNIを介してオペレーティングシステムと対話します。

JVMにより、Javaはプラットフォームを介して実行できます。 1)jvmは、bytecodeをロード、検証、実行します。 2)JVMの作業には、クラスの読み込み、バイトコード検証、解釈の実行、およびメモリ管理が含まれます。 3)JVMは、動的クラスの読み込みや反射などの高度な機能をサポートしています。

Javaアプリケーションは、次の手順を通じて異なるオペレーティングシステムで実行できます。1)ファイルまたはパスクラスを使用してファイルパスを処理します。 2)System.getEnv()を介して環境変数を設定および取得します。 3)MavenまたはGradleを使用して、依存関係を管理し、テストします。 Javaのクロスプラットフォーム機能は、JVMの抽象化レイヤーに依存していますが、特定のオペレーティングシステム固有の機能の手動処理が必要です。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









