この質問はたくさん検索されましたが、満足のいく答えが得られませんでした。私はJVMについて知っていますが、oracleがすべてのタイプのCPUまたは特定のOS用にJVMを作成する必要があるかどうかはわかりません。もし私が間違っていたら私を訂正してください。しかし、JVMはOSによって通常のプログラムとして実行されるので、OS中心ですという結論に達しました。もしそうなら、oracleは各Linuxディストリビューションごとに異なるJVMを開発する必要がありますか?しかし、ウェブを検索しているうちに、建築についての記事も見つかりました。私は本当に混乱しています。どんな助けもありがとう。JVMは、OSまたはCPUアーキテクチャに従って開発されていますか?
0
A
答えて
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ディストリビューションで実行できます。
関連する問題
- 1. Djangoの開発はバザールの開発モデルに従っていますか?
- 2. osがインストールされていない状態でCPUアーキテクチャを判断する
- 3. protovisはまだ活発に開発されていますか?
- 4. ウェブクローラがrobots.txt URLまたはタグに従っていますか
- 5. emo-frameworkで開発されたゲームは誰も知っていますか?
- 6. ナゲットフィードは定義された基準に従っていますか?
- 7. JVMをCPUアーキテクチャ用のコンパイラとは異なるCPUアーキテクチャと互換性を持たせる方法を教えてください。
- 8. SConsキャッシュは、さまざまなOSおよびCPUアーキテクチャでどのように動作しますか?
- 9. iPhoneアプリは私によって開発され、クライアントによって提出されましたか?
- 10. iOSアプリケーションの開発に従うには、どのアーキテクチャが最適ですか?
- 11. Railsの開発Mac OSまたはWindows
- 12. イメージはあなたの指に従っていますか?
- 13. 私はLaravelで開発されたウェブサイトを持っています
- 14. CPUアーキテクチャの違いは何ですか?
- 15. JButtonは意図したハンドラに従っていませんか?
- 16. CPUソケットの数、またはOS X
- 17. JVMはOSまたはパッケージの一部ですか?
- 18. L1d CPUキャッシュタグはどこに格納されていますか?
- 19. Okta Kentor.AuthServices IdentityServer3 IDPによって開始されたSSOがSPによって開始されたSSOエラーまたはデザインをトリガーしていますか?
- 20. シェルスクリプトによって作成されたファイルは、pythonによって開かれていませんか?
- 21. アンドロイドの春は開発されていますか?
- 22. OSによってスレッドが殺されています
- 23. 従来のCOMアーキテクチャを継承していますか?
- 24. HTML5は十分に開発され、文書化されていますか?
- 25. Objective-CはMac OS/iPhoneでの開発にのみ使用されますか?
- 26. iphoneの開発はMac OS Xの開発と非常に似ていますか?
- 27. IClientMessageInspectorはWP7開発用に用意されています
- 28. JVMはCentOS 6で100%CPU使用率を常に超えています
- 29. JVMによって設定されたオブジェクトタグは、JVMTIエージェントに表示されますか?
- 30. XamarinとAuth0 - 私はauth0によって設けられたガイドに従っていましたし、うまく認証されていますが、私は私がアプリを開いて、リフレッシュの利点を保持し、服用開始したかった毎回ログインを持つのに疲れて取得していますリフレッシュトークンに
Oracleのjavaダウンロードページにはっきりと答えてください... – rkosegi
このページをチェック:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html – marstran
本当に依存しています。 JVMはネイティブコードで書かれています。これはC++、C、またはアセンブリを意味する可能性があります。プラットフォームに依存しないC++でJVMを作成する場合は、各プラットフォーム(OS)ごとに再コンパイルするだけで済みます。 AssemblyでJVMを書く場合は、各CPUごとに書き直す必要があります。オラクルのJVM(Windows、macOS、Linux)にはいくつかのバージョンしかないので、いくつかの結論を導くことができます。しかしそれはちょうどオラクルのバージョンです。 –