JNI技术---clojure 调用C++库的方法

本文介绍了JNI(Java Native Interface)的基本概念,包括JVM与本地方法的关系,以及JNI的主要目标。通过一个具体的例子展示了如何使用Java调用C++库GLPK,并在Clojure中进一步调用这些Java的JNI接口。文章强调了JNI在避免重复造轮子和利用底层语言效率方面的价值,同时也提到了在Clojure中调用本地方法的注意事项和解决方法。
摘要由CSDN通过智能技术生成

本文目的是加深理解—to JNI and clojure。本文可能比较抽象,时隔多月,自己再次来读的时候都觉得这文章晦涩难懂,如果你有疑问欢迎提问。

JNI概述

JNI,是Java Native Interface的缩写,中文为Java本地调用。

JavaTM Native Interface (JNI) is a standard programming interface for writing Java native methods and embedding the JavaTM virtual machine* into native applications. The primary goal is binary compatibility of native method libraries across all Java virtual machine implementations on a given platform.

要了解这个概念,事先需要了解的有:
1.什么是Java native 方法?
Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。
(也就是将C/C++代码移植到JVM上面。。。)
当然反过来, Native程序中的函数可以调用Java层的函数,也就是在C/C++程序中可以调用Java的函数。(不过这一点还不太care)

JVM和本地方法

Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。通过对中央处理器(CPU)所执行的软件实作,实现能执行编译过的Java程序码(Applet与应用程序)。

作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对载入编译文件格式要求,任何语言都可以由JVM编译运行。—wiki

承载Java世界的虚拟机是用Native语言写的,而虚拟机又运行在具体平台上,所以虚拟机本身无法做到平台无关。然而,有了JNI技术,就可以对Java层屏蔽具体的虚拟机实现上的差异了。这样,就能实现Java本身的平台无关特性。其实Java一直在使用JNI技术,只是我们平时较少用到罢了。
(因为要理解classpath(classLoader去读取的路径) java.library.path,目前来说最好的办法就是去理解JVM。)
JVM的架构基本如下所示&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值