なぜJavaプラットフォームに依存しない言語なのですか?
公開: 2021-02-08目次
序章
Javaは、その誕生以来、他のすべてのプログラミング言語の間で絶大な人気を博しています。 そして、そのような巨大な反応の理由は、ユニークな機能を提供する能力です。 Java構文はc++とほぼ同じですが、c++よりもはるかに優れた機能を提供します。
オブジェクト指向プログラミング(OOP)が利用できるようになったため、Javaは当時の他のすべての言語よりも際立っていました。 Javaは、OOPをコアとして使用するために開発されたものであり、最も使用されている言語である理由の1つでした。 この概念により、再利用性とシームレスな実行が向上します。 現時点では、「なぜオブジェクトを使用する必要があるのか」という疑問が頭に浮かぶかもしれません。
Javaのオブジェクトは、c言語の構造体に似ており、同様のメソッドと変数をバインドしています。 これに加えて、Javaは抽象化、カプセル化、継承、およびポリモーフィズムを提供し、ユーザーがオブジェクトを実装することを奨励します。
Javaは、アプリ開発、Web開発、ソフトウェアツールの構築などの多くのドメインで支配的な役割を果たしています。 また、ライブラリが豊富にあるため、作業が簡単になります。 また、IDEの可用性は、開発者の注目を集める上で重要な役割を果たします。 Eclipse、IntelliJ、NetBeansなどのIDEは、多くの開発者によって頻繁に使用されています。
さて、それでは私たちの議論に行きましょう。
しかし、まず第一に、プラットフォームの独立性とはどういう意味ですか? その質問に対する答えを得るには、コードをコンパイルしたときに何が起こるかを知る必要があります。

コードのコンパイル
コードを書くときはいつでも、かなりの可読性を持つプログラミング言語の構文に従います。 また、単語、フレーズ、変数名、メソッド名などがほとんど含まれていません。これらはすべて、人間が読めるテキストであり、人間が理解できるテキストであると見なされます。
そのため、マシンはコンパイラを使用して、ソースコードをマシンレベルの言語とも呼ばれるマシン可読コードに変換します。 コンパイラは、特定のプレゼンテーションでマシンレベルのコードを構築し、CPUが簡単に理解できるようにして、シームレスに実行できるようにします。
このマシンレベルの言語の構築は、プログラミング言語やオペレーティングシステムごとに異なります。 たとえば、c / c ++は、2台のマシンが異なるオペレーティングシステムで実行されている場合、それらのマシンで同じではない.exeファイルを生成します。
そして、ここで問題が発生します!
マシンレベルの言語がオペレーティングシステムごとに異なる場合、両方のシステムが同じオペレーティングシステムで動作しない限り、新しいマシンの別のマシンでコンパイルされたコードを実行することはできません。 これは、多くのプログラマーや開発者にとってはがらくたのように感じます。
しかし、Javaは物事を簡単にし、Javaにはこれに対する解決策があります。 始めましょう。
Javaはプラットフォームに依存しません
では、Javaでコードをコンパイルするとどうなりますか?
ステートメント「javacfilename.java」を入力するか、javaでコードをコンパイルするたびに、javacはコードをコンパイルします。 そして、バイトコードと呼ばれる中間コードを作成します。
これは、Javaがすべての異なるプログラミング言語間で違いを生む場所です。 バイトコードと見なされる.classファイルを作成します。 一方、c / c ++のような言語は、コンパイル時にネイティブに実行可能なコードを作成するため、プラットフォームに依存します。
ちょっと待ってください、これはお祝いには時期尚早です。 このバイトコードは実行可能ではありません。 このバイトコードを実行するには、トランスレータが必要です。 そして、JVMがこの仕事をします。 通常、JVMはコンピュータのメインメモリにあります。 Java仮想マシンはインタプリタとして機能し、javacによって生成されたバイトコードを実行します。
これで完了です。コードは正常に実行されます。
では、Javaはどのようにしてそれをすべて単独で管理するのでしょうか?
そして答えは、JVMのせいです。 ソースコードのコンパイルによって生成されたバイトコードはどのオペレーティングシステムでも実行できますが、マシンに存在するJVMはオペレーティングシステムごとに異なります。 そしてこれが、Javaがプラットフォームに依存しないプログラミング言語と見なされる方法です。
それを正しく理解するために、JVMのアーキテクチャと動作を理解しましょう。
JVMアーキテクチャ
JVMはJavaランタイム環境の一部であり、.javaファイルを.classファイルに変換する役割を果たします。 Javaコードをコンパイルすると、JVMはソースコードのmainメソッドを呼び出します。

JVMアーキテクチャ
ClassLoader
これは、Java仮想マシンのサブシステムです。 .classファイルをロードし、例外があるかどうかをチェックします。これが、実行時例外がほとんどない理由です。 そして、それをチェックした後、存在する変数とメソッドにメモリを割り当て、変数と配列にデフォルト値を割り当てます。 また、コードに存在する静的メソッドまたは変数も実行します。
JVMmには、ブートストラップクラスローダー、エクステンションクラスローダー、アプリケーションクラスローダーの3つの組み込みクラスローダーがあります。
JVMのメモリ領域
メソッド/クラスエリア
クラス名、メソッド名、変数などの情報を格納します。 これは、クラス内のすべてのメソッドと変数の共有リソースです。
ヒープ
ヒープ領域に格納されているすべてのデータの情報を格納します。
JVM言語スタック
情報をスタックフレーム/フレームとも呼ばれるブロックに格納します。これは、関数呼び出しがあるときに現在の情報を格納し、ローカル変数を格納します。また、スレッド管理でも主要な役割を果たします。
PCレジスタ
現在実行中の命令のアドレスを格納します。 これは、マルチスレッド実行の状況で役立ちます。
ネイティブメソッドスタック
使用されるネイティブメソッドのすべての情報が格納されます。
実行エンジン
実行エンジンはバイトコードを実行し、到達不能または参照されていないオブジェクトに割り当てられたメモリを削除します。 実行エンジンのインタープリターは、バイトコードをストリームで読み取り、行ごとに解釈することでバイトコードを実行します。
また、JITコンパイラ(Just In Timeコンパイラ)と呼ばれるエキサイティングな部分もあり、メソッドのネイティブ実行可能コードを作成します。したがって、複数の関数呼び出しがある場合、JVMはそれを再度解釈する必要はなく、ネイティブ実行可能コードを直接使用します。 したがって、実行のパフォーマンスが向上します。
ネイティブメソッドインターフェイス
このインターフェースは、C /C++などのさまざまな言語で実装されたアプリケーションと対話するためにJavaによって使用されます。 相互作用は双方向であり、JVMはこれらのアプリケーションを呼び出すことも、それらのアプリケーションから呼び出すこともできます。
ネイティブメソッドライブラリ
実行エンジンで使用される可能性のある母国語ライブラリを追跡します。
JVMのアーキテクチャを理解したので、話に戻りましょう。 したがって、このJVMはオペレーティングシステムごとに異なりますが、これらのJVMによって生成される出力は、提供された同じバイトコードに対して同じになります。

また読む: Javaプロジェクトのアイデアとトピック
世界のトップ大学からオンラインでソフトウェア開発コースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
結論
Javaのいくつかの独自の機能を確認し、C / C ++などの言語でコードをコンパイルするとどうなるかを理解し、ネイティブに実行可能なコードとバイトコードの違いを理解しました。 Javaがプラットフォームに依存しない言語と見なされる理由の説明をウォークスルーし、JVMがJavaのプラットフォームに依存しない理由であることを理解しました。 理解を深めるために、JVMアーキテクチャを調べました。
Javaがプラットフォームに依存しない理由を理解したので、Javaの他の独自の機能を調べて、それらを利用し始めてください。
Java、フルスタックソフトウェア開発について詳しく知りたい場合は、upGrad&IIIT-Bのフルスタックソフトウェア開発のエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに設計されており、500時間以上の厳格なトレーニングを9時間以上提供しています。プロジェクト、割り当て、IIIT-B卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。
他の言語に対するJavaの利点は何ですか?
Javaには他の言語に比べて多くの利点があります。 一番の利点から始めましょう。Javaはプラットフォームに依存しません。 Javaコードは、任意のハードウェアプラットフォーム、オペレーティングシステム、およびブラウザで実行できます。 どのデバイスでも実行できます。 つまり、Javaでアプリケーションを作成すると、どのデバイスでも実行できるようになります。 それはそれと同じくらい簡単です! また、コードを記述したら、バグのデバッグと修正は非常に簡単です。 最後に、Javaはオブジェクト指向です。 これは、より小さなプログラムとコードを使用する必要があることを意味します。 これにより、コードの操作が簡単になります。 変更が必要な場合は、コードでエラーが発生しにくくなります。 マルチスレッド、メモリ管理、プラットフォームに依存しない、セキュリティ、仮想マシン、つまりバイトコード、コレクションフレームワーク、ガベージコレクタ、階層化アーキテクチャなどの機能があります。
Javaプラットフォームに依存しないのはなぜですか?
Javaは仮想マシンを使用するため、プラットフォームに依存しません。 Javaプログラミング言語とすべてのAPIはバイトコードにコンパイルされます。 バイトコードは事実上プラットフォームに依存しません。 仮想マシンは、異なるプラットフォームのバイトコード間の違いを処理します。 したがって、Javaの実行時要件は非常に小さいです。 Java仮想マシンは、ハードウェア関連のすべての問題を処理するため、異なるハードウェア用にコードをコンパイルする必要はありません。
Javaでの自動ガベージコレクションとは何ですか?
自動ガベージコレクションは、プログラマーがコードを記述しなくてもガベージコレクターが自動的に実行されるガベージコレクション手法です。 Javaでは、ガベージコレクションは、Java仮想マシンを特別なモードにすることによって行われます。 ガベージコレクターは、実行する機会が見つかったときに実行されます。 一部のガベージコレクターはストップザワールドアプローチを使用しており、Java仮想マシンはガベージコレクションを実行するためにプログラムの実行を停止する必要があります。 ガベージコレクションは簡単な概念ではありませんが、一度取得すると、振り返ることはありません。 そして、Javaのガベージコレクションは最も理解しやすいものの1つです。