2017-09-11 8 views
-2

私はJavaが強力な利点を提供していることを知っています。Javaコードはバイトコードにコンパイルされており、このバイトコードはJVMによって実行されるため、Javaは移植性に関するものです。しかし、それらの実装がオペレーティングシステムに依存するような機能が存在する。各jarはどのようにLinuxやWindows上で動作するのでしょうか?

https://speakerdeck.com/raboof/jvm-hacking(4番目のスライド)
システム依存のCコードがあります。どのように機能するのですか?私はバインド方法を使用して同じjarがWindowsとLinux上で実行できることを意味します。結局のところ、linuxとwindowsのbindメソッドはかなり異なっています(パラメタの数、名前など)。

あなたはそれを私に説明できますか?

+0

は、私は、基礎となるJVMまたはJDKの実装が、[多分これ](https://stackoverflow.com/questions/5919996/howを見ていない... Javaライブラリがかなり完了すると、まれに必要なのですlinux-windows-in-c-preprocessor)は可能な方法で光を当てるでしょう。 –

+0

したがって、JVM(ランタイム)から実行されるネイティブのCコードには、WIN_32のようなものがあります。 –

+0

私はそれを言わなかった。私はそれが可能な方法だと言いました。また、各環境には独自のJREがあるので、実行可能なJARは同じですが、JREは同じではありません。 –

答えて

0

これはJVMとその実行時ライブラリであり、魔法です。

純粋なJavaプログラムはバイトコードで構成され、JVMはこのバイトコードを解釈またはコンパイルするため、ローカルCPU/OSはそれを実行できます。

"ネイティブ"と宣言されたメソッドがあり、Windows x86の特定のJavaランタイムライブラリには実装があり、x64バージョンには別の実装があり、Linux XYZにはもう1つの実装などがあります。これらのネイティブメソッドのシグネチャ(パラメータの数と型)は、すべての実装で同じですが、ラップするWindows/Linux/macOSの機能に共通の抽象化を組み込んでいます。

あなたのコードではネイティブメソッドを自分で使用する必要がある場合は、あなたのプログラム(.dllファイル、.soというか、何でもあなたの標的化さシステムが必要)で、すべての必要な実装を提供する必要があります。しかし幸いにも、それは

関連する問題