Java Native Interface(JNI,Java本地接口),可以调用本地方法。这里的“本地”是指用其他语言(如 C, C++) 编写的特殊方法。
从历史上看,使用JNI主要有三个用途:
1)由于Java程序是运行在虚拟机之上的,虚拟机作为中间件,带来的平台无关性的好处的同时,也使得那些要求访问OS甚至硬件的底层操作变得无所适从。通过JNI可以调用C/C++等编写的代码,来提Java完成,比如读写Windows的注册表,取得硬盘的序列号等。
2)由于一些“古老”的资源要使用“古老”的代码库,为其再开发一个Java版本是不划算的。于是JNI又派上用场了。
3)最后是为了性能。Java的性能可能是所有语言中几乎最慢的了,关键性的部分可以通过JNI调用性能好的语言,如C/C++/Colob等。但是,随着Java版本的升级,性能在不断提高,如今绝大多数地方已经不值得使用JNI来提高性能了。
然而,使用JNI是有着相当的弊端的。就是从此失去了Java的平台无关性。对于第一点中的原因,很好理解吧,你通过JNI调用了一段C++的代码去读Windows的注册表。如果移植到其他OS上,何来的注册表??
【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208