在JNANatives的definitelyRunningAsRoot中,如果是非windows系统,则调用
JNACLibrary.geteuid
elasticsearch使用JNAKernel32Library来封装对windows的Kernel32的调用,使用 JNACLibrary来封装对非windows系统的libc的调用
static { try { Native.register("c"); } catch (UnsatisfiedLinkError e) { logger.warn("unable to link C library. native methods (mlockall) will be disabled.", e); } } static native int mlockall(int flags); static native int geteuid();四、总结
JNI更适合使用本地调用来解决对性能有更高要求的场景,需要我们自己使用C或者C++来实现处理逻辑。
对于调用已有的本地库的方法或者操作系统的方法,使用JNA更为方便便捷。