64ビットJDKを使用している場合、またはJavaの世界でこれが可能である場合にのみコンパイルされるJavaコード構造はありますか?
3 に答える
Java は、32 ビットか 64 ビットかに関係なく、プラットフォームのワード長などからユーザーを保護するように特別に設計されています。一般に、これに敏感な言語で何かを構築することは不可能です。
したがって、Java で記述されたすべてのコードは、どのプラットフォームでもコンパイルする必要があります。
さらに、コンパイラは任意のプラットフォームで実行できる必要がありますが、ネイティブ コードで記述できるため、特定のプラットフォームでの実行を妨げるバグが発生する可能性が技術的にあります。
JNI (Java Native Interface) を使用すると、いくつかの問題が発生する可能性がありますが、これは通常、Java から呼び出しおよび呼び出される C/C++ コードにあります。
間違いなくコンパイルレベルではありません。Java コンパイラーは、それが実行される JVM の種類を認識しておらず、.class ファイルに JVM 固有のものは何もありません。経験する唯一の違いは実行時ですが、ここでも、Java コンストラクトはそれを識別できません。アーキテクチャ システム プロパティを読み取ることができますが、それはあなたが目指しているものではないと確信しています。
コメントの「次の質問」については、JDK は、ソース コード、コンパイルされたバイトコード、および JVM を含む完全な Java スタックを提供します。32 ビット JDK と 64 ビット JDK の違いは、すでにお察しのとおり、JVM 部分にあります。
Java コンパイラは、基礎となるハードウェアを認識しません。
Java ソース ----> Java コンパイラ ------>バイトコード (ハードウェアに依存しない)
バイトコード ------> Java ランタイム -------->マシン レベル コード (プラットフォーム/ハードウェアに依存)
したがって、あるハードウェアで実行される Java コードが別のハードウェアで動作しないということはあり得ません。
2 番目の質問に対する答えは、バイトコードのマシン レベルのコードを作成するために、ランタイムは基盤となるハードウェアでサポートされている操作を認識している必要があるということです。
32 ビット マシンと 64 ビット マシンの手順は異なります。