JNI - 概述

2 篇文章 0 订阅

前言

本文是Oracle官方JNI文档的翻译基础上加上部分个人理解,原文地址 Chapter 1:Introduction

本文介绍JNI(Java Native Interface)。JNI是Native编程接口,它允许运行在JVM(Java Virtual Mechine)上的应用跟使用其他语言(比如C、C++等)实现的库进行交互。
JNI最大的好处在于对底层JVM实现没有强制约束,所以JVM供应商可以在不影响其他JVM功能的基础上支持JNI。开发者可以开发一份Native应用或库,然后运行在所有支持JNI的JVM上。

JNI 概述

当你使用纯Java实现业务逻辑时,会出现一些Java没办法支持的情况。开发者可以使用JNI写native方法去处理纯Java应用没办法解决的问题。
下面是一些典型的JNI应用场景:

  • 标准Java库不支持平台相关的特性
  • 在已有其他语言实现库的基础上,使用JNI让库在Java上可用
  • 实现一些时间关键的逻辑

通过JNI编程,你可以使用Native方法做以下事情:

  • 创建、检查、更新Java对象(包括数组与字符串)
  • 调用Java方法
  • 异常捕获及抛出
  • 加载类以及获取类信息
  • 进行运行时类型检测

你可以通过JNI开发嵌入到JVM的Native应用,比起链接JNI源码,JNI让Native应用跑在JVM上更容易。

历史背景

不同VM厂商提供不同的Native接口,不同的接口迫使开发者必须为一个特定平台开发、维护多份不同版本Native库。
以下是一些Native接口方案:

  • JDK 1.0 native method interface
  • Netscape’s Java Runtime Interface
  • Microsoft’s Raw Native Interface and Java/COM interface

具体为啥上述方案都没成为标准就不做介绍了,有兴趣的可以查阅原文

目标

我们相信经过思考的统一接口会给我们带来以下好处:

  • 每个VM厂商可以支持大部分Native代码
  • Native工具开发者不再需要维护不同版本Native方法接口
  • 应用开发者将可以使用一份Native代码,并且它可以在不同VM上运行。

经过一系列讨论,一致认为标准Native接口必须满足以下需求:

  • 二进制兼容性。最主要的目标是同一平台下不同JVM实现应该保持二进制兼容性。开发者只需要为特定平台维护一份Native库。
  • 效率。为了支持时间紧张代码,Navtie方法必须不能有太大的代价。目前已知技术都有一定的代价,我们必须在性能及VM独立性之间做一些取舍。
  • 功能强大。Native接口必须要暴露足够多的VM接口让Native方法可以实现更多有用的任务。

JNI 解决方案

我们希望采用现有的解决方案作为标准接口,因为这对开发者来说负担最小,但不幸的是没有现存的解决方案满足我们的目标。
具体各方案不合适的原因有兴趣地查看原文,这里不做过多介绍。

JNI 编程

作为Native方法开发者你应该使用JNI。JNI编程帮你屏蔽了具体JVM不同实现。通过遵循JNI标准,您将为Native库提供在给定Java VM中运行的最佳机会。
作为JVM开发者你应该使用JNI。JNI已经经过时间验证并且不需要增加额外VM实现的负担及约束,包括对象表达、垃圾回收机制等。

下一节我们将会介绍 JNI设计概述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值