検索
ホームページJava&#&チュートリアルJavaのプログラム実行機構とエラーの解析

Javaのプログラム実行機構とエラーの解析

Sep 26, 2017 am 10:05 AM
java動作機構間違い

この記事では、主に Java 仮想マシン (JVM) の関連コンテンツと、Java プログラムの実行メカニズムとエラー分析について説明します。必要な方はさらに詳しく学ぶことができます。

JVM (Java Virtual Machine) さまざまな方法 (ソフトウェアまたはハードウェア) で実装できるコンピューティング デバイスの仕様。仮想マシンの命令セットのコンパイルは、マイクロプロセッサの命令セットのコンパイルと非常に似ています。 Java 仮想マシンには、バイトコード命令のセット、レジスターのセット、スタック、ガベージ コレクション ヒープ、およびストレージ メソッド フィールドが含まれます。

Java 仮想マシン (JVM) は、Java コードを実行できる架空のコンピューターです。インタプリタが JVM 仕様に従って特定のコンピュータに移植されている限り、コンパイルされた Java コードはすべてそのシステム上で実行されることが保証されます。

1. Java 仮想マシンを使用する理由

Java 言語の非常に重要な特徴は、プラットフォームからの独立性です。この機能を実現するには、Java 仮想マシンの使用が鍵となります。一般的な高級言語を異なるプラットフォームで実行したい場合は、少なくとも異なるターゲット コードにコンパイルする必要があります。 Java 言語仮想マシンの導入後は、別のプラットフォームで実行するときに Java 言語を再コンパイルする必要はありません。 Java 言語の使用モデル Java 仮想マシンは特定のプラットフォームに関連する情報をシールドするため、Java 言語コンパイラーは Java 仮想マシン上で実行されるターゲット コード (バイトコード) を生成するだけで済み、変更を加えずに複数のプラットフォーム上で実行できます。 Java 仮想マシンはバイトコードを実行するときに、そのバイトコードを特定のプラットフォームで実行するためのマシン命令に解釈します。

Java 実行メカニズム

Java プログラムの実行には、作成、コンパイル、実行という 3 つのステップを経る必要があります。

書き込みとは、Java 開発環境にプログラム コードを入力し、最終的に拡張子 .java が付いた Java ソース ファイルを形成することを指します。

コンパイルとは、最終的に実行可能ファイルを生成する C 言語とは異なり、Java コンパイラーを使用してソース ファイルのトラブルシューティングを行うプロセスを指します。コンパイル後、拡張子 .class が付いたバイトコード ファイルが生成されます。

実行とは、Javaインタプリタを使用してバイトコードファイルをマシンコードに変換し、実行して結果を表示することを指します

バイトコードファイルは、特定のマシン環境やオペレーティングシステム環境とは何の関係もない中間コードです。バイナリファイルとは、JavaソースファイルがJavaコンパイラによってコンパイルされた後に生成されるオブジェクトコードファイルです。プログラマもコンピュータもバイトコード ファイルを直接読み取ることはできません。そのため、Java はコンパイルに基づいて解釈および実行される言語です。

Java インタプリタは、特定のハードウェア環境および実行用のオペレーティング システム プラットフォームの下で、バイトコード ファイルをマシンコードに変換する役割を果たします。したがって、Java プログラムは既存のオペレーティング システム プラットフォーム上で直接実行することはできず、Java 仮想マシンと呼ばれるソフトウェア プラットフォーム上で実行する必要があります。

Java 仮想マシン (JVM) は Java プログラムを実行するためのソフトウェア環境であり、Java インタープリタは Java 仮想マシンの一部です。 Java プログラムを実行する場合、最初に JVM が起動され、次に Java バイトコードの解釈と実行を担当します。Java バイトコードは JVM 上でのみ実行できます。このように、JVM を使用して、Java バイトコード プログラムを特定のハードウェア プラットフォームおよびオペレーティング システム環境から分離できます。特定のプラットフォーム用の JVM が別のコンピュータにインストールされている限り、Java プログラムは現在の特定の環境を考慮せずに実行できます。ハードウェア プラットフォームとオペレーティング システム環境では、バイトコード ファイルが生成されたプラットフォームを考慮する必要はありません。 JVM は、さまざまなソフトウェア プラットフォームとハードウェア プラットフォーム間の具体的な違いを隠し、それによって真のバイナリ コード レベルのクロスプラットフォーム移植を実現します。 JVM は、プラットフォームに依存しない Java の基盤であり、Java のクロスプラットフォーム機能は、JVM で Java プログラムを実行することによって実現されます。

Java 言語の「一度書いたらどこでも実行できる」アプローチ は、現在の高水準プログラミング言語のほとんどが、異なるシステムに対して異なるマシンコードを生成するためにコンパイルする必要があるという問題、つまりハードウェアの異種問題を効果的に解決します。環境とオペレーティング プラットフォームにより、プログラムの開発、保守、管理のオーバーヘッドが大幅に削減されます。

Java プログラムは JVM を通じてクロスプラットフォーム機能を実現できますが、JVM はクロスプラットフォームではないことに注意してください。つまり、異なるオペレーティング システム上の JVM は異なり、Windows プラットフォーム上の JVM は Linux 上では使用できません。また、その逆も同様です。

JAVA プログラムの実行エラー分析

一般に、稼働中の大規模プロジェクトでは、最大で次のような問題が発生する可能性があります。

1. CPU 使用率の異常

1) CPU 使用率、ターゲット プロセスの使用率を調べてから、各コアの使用率を確認します。これは、単一スレッドの問題なのかスレッド プールの問題なのかを特定するのに役立ちます。

2) プログラムが一定期間正常に実行された後、CPU が突然垂直方向に上昇することがあります。これは、プログラム内のロックに関連している可能性があります (ロックが短時間保持されている場合は、より良い状態になります)。 cas+yield を試してスピン ロックを実装してください)

3) デッドロックの場合は、呼び出しスタックを直接エクスポートして問題の解決策を見つけます。

2. 異常なメモリ

1) メモリリーク、言うまでもなく、問題を見つけるためにスタックをダンプします

2) 頻繁な GC もパフォーマンス不足につながります。プログラム内で GC が頻繁に発生する場合は、新しい世代のサイズを増やしても問題が解決しない場合は、注意が必要です。一時オブジェクトの作成 (メモリの繰り返し適用を避けるためにオブジェクト プール テクノロジーを使用できます)

3. 特定のワーカー スレッドの予期せぬ終了

1) 開いているファイル、IO を確認します。操作占有およびディスク使用量。 df iostat などのコマンドを使用できます
2) 監視やネットワークの使用状況を占有しているプログラムがあるかどうかを確認するには、netstat などのコマンドを使用できます


ツールを使用して障害を分析します


1 .jmap
jmap pid デフォルトで JAVA を表示します


jmap -histo pid メモリ内のアクティブなインスタンスの数を確認します


jmap -dump:format=b,file=(file name) pid Java プログラムのメモリを完全にエクスポートします。完全な分析は、プログラムの初期化後に jmap -dump:format=b,file=a.bin を 1 回実行し、次にメモリ使用量が増加し始めたときに 1 回実行し、最後にメモリ使用量に達したときに再度実行します。 JHat またはサードパーティ ツールを使用してダンプ ファイルを開きます。


3.jstack または JCONSOLE


デフォルトでは、プロセス コール スタック情報を表示して、IO タイムアウト、デッドロック、またはその他の状況を分析できます。プログラムに異常が発生した場合に分析する必要がある情報は、問題の特定とトラブルシューティングに役立ちます。


jstat -gc pid gaptime GC 関連情報を表示します


jstat -compiler pid リアルタイムのコンパイル情報を表示します


4.kill -3


上記と同様、開発ツールを持たないサーバーに適していますインストールされており、コール スタック情報といくつかの GC 情報を出力できます


5.iftop ネットワーク ポートを表示します

ネットワークの受信および送信トラフィックとターゲット サーバー間のトラフィックを確認します。これは、攻撃が原因かどうかのトラブルシューティングに役立ちます


pstack 仮想マシン スタック



は gdb をインストールする必要があります。通常は、特定の仮想マシン レベルのエラーが発生したときに C/C++ プログラムをチェックするために使用されます。


概要

以上がJavaのプログラム実行機構とエラーの解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JVMはオペレーティングシステムAPIの違いをどのように処理しますか?JVMはオペレーティングシステムAPIの違いをどのように処理しますか?Apr 27, 2025 am 12:18 AM

JVMは、JavanativeInterface(JNI)およびJava Standard Libraryを介してオペレーティングシステムのAPIの違いを処理します。1。JNIでは、Javaコードがローカルコードを呼び出し、オペレーティングシステムAPIと直接対話できます。 2. Java Standard Libraryは統一されたAPIを提供します。これは、異なるオペレーティングシステムAPIに内部的にマッピングされ、コードがプラットフォーム間で実行されるようにします。

Java 9で導入されたモジュール性は、プラットフォームの独立性にどのように影響しますか?Java 9で導入されたモジュール性は、プラットフォームの独立性にどのように影響しますか?Apr 27, 2025 am 12:15 AM

modularitydoesnotdirectlyectlyectjava'splatformindepensence.java'splatformendepenceismaindainededainededainededaindainedaindained bythejvm、butmodularityinfluencesApplucationStructure andmanagement、間接的なインパクチャプラット形成依存性.1)

ByteCodeとは何ですか?また、Javaのプラットフォームの独立性とどのように関係していますか?ByteCodeとは何ですか?また、Javaのプラットフォームの独立性とどのように関係していますか?Apr 27, 2025 am 12:06 AM

bytecodeinjavaisthe intermediaterepresentationthateNablesplatformindepence.1)javacodeis compiledintobytecodestoredin.classfiles.2)thejvminterpretsorcompilesthisbytecodeintomachinecodeatime、

Javaがプラットフォームに依存しない言語と見なされるのはなぜですか?Javaがプラットフォームに依存しない言語と見なされるのはなぜですか?Apr 27, 2025 am 12:03 AM

javaachievesplatformedenceTheTheTheJavavirtualMachine(JVM)、これは、javacodeisisisisisissompiledIntobytecode.2)javaCodeisisisisissompiledevedevicetecode.2)

グラフィカルユーザーインターフェイス(GUI)は、Javaのプラットフォーム独立性の課題をどのように提示できますか?グラフィカルユーザーインターフェイス(GUI)は、Javaのプラットフォーム独立性の課題をどのように提示できますか?Apr 27, 2025 am 12:02 AM

Javagui開発におけるプラットフォームの独立性は課題に直面していますが、Swing、Javafx、統一外観、パフォーマンス最適化、サードパーティライブラリ、クロスプラットフォームテストを使用することで対処できます。 Javaguiの開発は、クロスプラットフォームの一貫性を提供することを目的としたAWTとSwingに依存していますが、実際の効果はオペレーティングシステムごとに異なります。ソリューションには以下が含まれます。1)SwingおよびJavafxをGUIツールキットとして使用します。 2)uimanager.setlookandfeel()を介して外観を統合します。 3)さまざまなプラットフォームに合わせてパフォーマンスを最適化します。 4)ApachepivotやSWTなどのサードパーティライブラリを使用する。 5)一貫性を確保するために、クロスプラットフォームテストを実施します。

Java開発のどの側面がプラットフォームに依存していますか?Java開発のどの側面がプラットフォームに依存していますか?Apr 26, 2025 am 12:19 AM

javadevelopmentisnotentirelylylypratform-IndopentDuetoseveralfactors.1)jvmvariationsaffectperformanceandbehavioracrossdifferentos.2)nativeLibrariesviajniintroducePlatform-specificissues.3)giaiasystemsdifferbeTioneplateplatifflics.4)

さまざまなプラットフォームでJavaコードを実行するときにパフォーマンスの違いはありますか?なぜ?さまざまなプラットフォームでJavaコードを実行するときにパフォーマンスの違いはありますか?なぜ?Apr 26, 2025 am 12:15 AM

Javaコードは、さまざまなプラットフォームで実行するときにパフォーマンスの違いがあります。 1)JVMの実装と最適化戦略は、OracleJDKやOpenJDKなどとは異なります。 2)メモリ管理やスレッドスケジューリングなどのオペレーティングシステムの特性もパフォーマンスに影響します。 3)適切なJVMを選択し、JVMパラメーターとコード最適化を調整することにより、パフォーマンスを改善できます。

Javaのプラットフォームの独立性の制限は何ですか?Javaのプラットフォームの独立性の制限は何ですか?Apr 26, 2025 am 12:10 AM

java'splatformindepentedencehaslimitationsincludingporformanceoverhead、versioncompatibulisisues、changleSwithnativeLibraryIntegration、プラットフォーム固有の機能、およびjvminStallation/maintenation。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。