2017-01-25 5 views
0

この質問はたくさん検索されましたが、満足のいく答えが得られませんでした。私はJVMについて知っていますが、oracleがすべてのタイプのCPUまたは特定のOS用にJVMを作成する必要があるかどうかはわかりません。もし私が間違っていたら私を訂正してください。しかし、JVMはOSによって通常のプログラムとして実行されるので、OS中心ですという結論に達しました。もしそうなら、oracleは各Linuxディストリビューションごとに異なるJVMを開発する必要がありますか?しかし、ウェブを検索しているうちに、建築についての記事も見つかりました。私は本当に混乱しています。どんな助けもありがとう。JVMは、OSまたはCPUアーキテクチャに従って開発されていますか?

+0

Oracleのjavaダウンロードページにはっきりと答えてください... – rkosegi

+0

このページをチェック:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html – marstran

+1

本当に依存しています。 JVMはネイティブコードで書かれています。これはC++、C、またはアセンブリを意味する可能性があります。プラットフォームに依存しないC++でJVMを作成する場合は、各プラットフォーム(OS)ごとに再コンパイルするだけで済みます。 AssemblyでJVMを書く場合は、各CPUごとに書き直す必要があります。オラクルのJVM(Windows、macOS、Linux)にはいくつかのバージョンしかないので、いくつかの結論を導くことができます。しかしそれはちょうどオラクルのバージョンです。 –

答えて

3

両方。

たとえば、HotSpot JVM(OpenJDKとOracle JDKはこのJVMに基づいています)を取ります。

ホットスポットソース(C++で書かれています)は、ほとんどがプラットフォームに依存しないコードで構成されていますが、大量のCPU固有のコードとOS固有のコードも含まれています。さらに、OS/CPUの特定の組み合わせに対するプラットフォーム依存のコードもあります。

この区別はdirectory structureに反映されます。

+ src 
| 
|--+ cpu 
| | 
| |--- ppc 
| |--- sparc 
| |--- x86 
| |--- zero 
| 
|--+ os 
| | 
| |--- aix 
| |--- bsd 
| |--- linux 
| |--- posix 
| |--- solaris 
| |--- windows 
| 
|--+ os_cpu 
| | 
| |--- aix_ppc 
| |--- bsd_x86 
| |--- bsd_zero 
| |--- linux_ppc 
| |--- linux_sparc 
| |--- linux_x86 
| |--- linux_zero 
| |--- solaris_sparc 
| |--- solaris_x86 
| |--- windows_x86 
| 
|--+ share 
    |     
    |--+ vm 
     | 
     |--- classfile 
     |--- compiler 
     |--- gc_implementation 
     |--- gc_interface 
     |--- runtime 
     |--- services 
     |--- etc. 

特定のプラットフォーム用のJVMバイナリをビルドするには、関連するすべてのディレクトリのソースが使用されます。例えば。 HotSpot Linux/x86ビルドには、share,cpu/x86,os/linuxおよびos_cpu/linux_x86が必要です。

すべての有効なOS/CPUの組み合わせが構築され、個別にテストされます。その結果、JDK download pageにプラットフォーム固有のバイナリが多数表示されます。

異なるLinuxディストリビューションでは、ターゲットアーキテクチャが同じである限り、別々のバイナリをビルドする必要はありません。 JDKは、サードパーティのライブラリに最小限の依存関係があります。 JVMはもう一度古いバージョンのglibcにリンクされているので、ほとんどすべての一般的なLinuxディストリビューションで実行できます。

関連する問題