我知道Java具有强大的优势:Java代码被编译为字节码,而这个字节码由JVM执行,因此Java是关于可移植性的。但是,存在这样的功能,即它们的实现取决于操作系统。
https://speakerdeck.com/raboof/jvm-hacking(第4张幻灯片)
如您所见,有系统依赖的C代码。它是如何工作的 ?我的意思是使用bind方法的jar
可以在windows和linux上执行。毕竟,linux和windows上的bind方法可能相当不同(参数数量,名称等)。
答案 0 :(得分:0)
JVM及其运行时库可以实现神奇。
纯Java程序由字节码组成,JVM解释或编译此字节码,因此本地CPU / OS可以执行它。
然后有声明为“native”的方法,并且Windows x86的特定Java运行时库有其实现,x64版本有另一个实现,Linux XYZ还有另一个实现,依此类推。这些本机方法的签名(参数的数量和类型)在所有实现中都是相同的,在它们包装的Windows / Linux / macOS功能上构建了一个通用的抽象。
如果您需要在代码中自己使用本机方法,则必须为程序提供所有必要的实现(.dll,.so或目标系统需要的任何内容)。但幸运的是,由于Java库相当完整,这很少是必要的......