十七、本地方法接口的理解

news2024/11/25 4:26:38

在这里插入图片描述
什么是本地方法?
1.简单来讲,一个Ntive method 就是一个Java调用非Java代码的接口.一个Native Method 是这样一个Java方法:该方法的实现由非Java语言实现,比如C,这个特征并非Java所特有,很多其他的编程语言都由这一机制,比如在C++中,你可以用extern"C"告知C++编译期区调用一个C函数。
2、在定义一个native Method 时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非Java语言在外面实现。

3.本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合 C/C++ 程序.

为什么要是使用Native Method?
Java使用起来非常方便,然而有些层次的任务用Java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。

与java环境外交互:
有时Java应用需要与外面的环境交互,这是本地方法存在的主要原因,你可以想想java需要与一些底层系统,如操作系统或某硬件交换信息的时的情况。本地方法正式这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解JAVA应用之外的繁琐的细节。

与操作系统交互:
JVM支持着Java语言本身和运行时库,他是Java程序赖以生存的平台,它由一个解释器(解释字节码)和一些链接到本地代码的库组成。然而不管怎么样,它毕竟不时一个完整的系统,它经常依赖于一些底层系统的支持,这些底层系统常常是强大的操作系统.通过使用本地方法,我们得以用java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用C写的,还有,如果我们要使用一些java语言本身没有提供封装操作系统的特性时,我们也需要使用本地方法。
Sun’s Java
S的解释器是用C实现的,这使得它像一些普通的C一样与外部交互,jre大部分是用Java实现的,它也通过一些本地方法与外界交互。例如:类java.lang.Thread 的setPriority()方法是用Java实现的,但是它实现调用的是该类里的本地方法。setpriority0()。这个本地方法是用C实现的,并被植入JVM内部,在Windows 95平台上,这个本地放过发最终将调用win32 SetPriority()API,这是一个本地方法的具体实现由JVM直接提供,更多的情况是本地方法由外部的动态链接库(external dynamic link library)提供,然后被JVM调用。

现状
目前该方法使用的越来越少,除非是与硬件由管的应用,比如通过java程序驱动打印机或者Java系统管理生产设备,子啊企业级应用中已经比较少见。因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用web service 等等、。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见HTTP攻击赏析(1)

基于OpenAPI的APIcat开源日志监控软件已经开发一段时间了,在自己的网站上抓到了一些HTTP的攻击,没事,我们就汇总给大家做个赏析,也当是个提醒。 对应的OpenAPI定义上传到了百家饭平台 API攻击样例详情百家饭OpenAPI平台主站http…

最新会声会影2023旗舰版更新了哪些功能?

会声会影在用户的陪伴下走过26余载,经过上百个版本的优化迭代,已将操作极大简易化,会声会影拥有公认的上手口碑。只需将想要的效果拖拽到轨道上,一拖一放间快速成片。专业工具助力视频剪辑操作简单,功能同样强大&#…

Ubuntu 新人上手 Microk8s 指南

文章目录1. 什么是 Ubuntu 核心2. 什么是 Kubernetes3. 什么是MicroK8s4. 为什么选择 Microk8s on Core5. 安装Ubuntu Core6. Ubuntu Core上安装 MicroK8S7. 启动 Microk8s8. 启用必要的 MicroK8s 插件9. 部署示例容器工作负载10. 检查部署状态并访问您的应用程序11. 管理镜像1…

docker布署spring boot jar包项目

目录docker 安装创建目录制作镜像启动容器查看日志docker 安装 Docker安装、详解与部署 创建目录 服务器中创建一个目录,存放项目jar包和Dockerfile 文件 mkdir /目录位置创建目录后创建Dockerfile文件,上传jar包到同一目录下 创建dockerfile vim Doc…

一文读懂Java/O流的使用方法和技巧

1.前言 Java 中的 I/O 流是实现输入和输出的一种机制,可以用来读写文件、网络、内存等各种资源。Java 提供了各种类型的流,包括字节流和字符流,以及面向文本和二进制数据的流。在本文中,我们将深入探讨 Java I/O 流的各个方面&am…

空指针,野指针

空指针在C/C中,空指针(null pointer)是指向内存地址0的指针变量。NULL在C/C中的定义为:#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif #endif从上面的代码定义中,我们可以发现在C…

【数据聚类|深度聚类】Deep Comprehensive Correlation Mining for Image Clustering(DCCM)论文研读

Abstract 翻译 最近出现的深度无监督方法使我们能够联合学习表示和对未标记数据进行聚类。这些深度聚类方法主要关注样本之间的相关性,例如选择高精度对来逐步调整特征表示,而忽略了其他有用的相关性。本文提出了一种新的聚类框架,称为深度全面相关挖掘(DCCM),从三个方面…

APP自动化(2)-【耗时3天爬出几个坑终于完成】appium连接手机模拟器,python对操作手机打开微信

上一篇已经熟悉了appium常用的命令 APP自动化(1)-Appium中adb常用命令 本篇主要是通过python连接appium对手机的一个操作。 后续的appium和nodejssdk安装都需要按照下面这篇文章的来跑 PythonAppium从安装到第一个小练习(保姆级别教程) 然后就是全部环境…

经纬恒润助力微宏动力荣获ISO 26262功能安全ASIL C产品认证证书

近日,经纬恒润与微宏动力合作的BMS4.0平台功能安全开发项目完美收官,该平台产品获得ISO 26262:2018 ASIL C 功能安全产品认证证书 以及 ASIL D 功能安全流程体系证书。该项目以微宏动力为实施主体,经纬恒润功能安全咨询团队提供支持&#xff…

《ChatGPT是怎样炼成的》

ChatGPT 在全世界范围内风靡一时,我现在每天都会使用 ChatGPT 帮我回答几个问题,甚至有的时候在一天内我和它对话的时间比和正常人类对话还要多,因为它确实“法力无边,功能强大”。 ChatGPT 可以帮助我解读程序,做翻译…

2023爱分析·一体化HR SaaS市场厂商评估报告:北森

目录 1.研究范围定义 2. 一体化HR SaaS市场分析 3.厂商评估:北森 4.入选证书 1.研究范围定义 研究范围 伴随数字化转型走向深入,企业人力资源数字化也进入快速发展阶段,人力资源的价值也得到了重新审视和定义。政策层面,《…

jmeter学习笔记二(jmeter函数与后置处理器)

Jmeter重要的函数 ${__counter(,)} 计数器 ​ ${__counter(TRUE,)} 默认加1; TRUE,每个用户有自己的计数器;FALSE,使用全局计数器 ​ 计数器元件,可以设置起始值,间隔值,最大值。运行结果超过最大值时&a…

Spark Shuffle解析

1 Shuffle的核心要点 1.1 ShuffleMapStage与ResultStage ShuffleMapStage与ResultStage 在划分stage时,最后一个stage称为finalStage,它本质上是一个ResultStage对象,前面的所有stage被称为ShuffleMapStage。 ShuffleMapStage的结束伴随着…

16 Nacos服务端服务注册源码分析

Nacos服务端服务注册源码分析 服务端调用接口 我们已经知道客户端在注册服务的时候实际上是调用的NamingService.registerInstance这个方法来完成实例的注册,而且在最后我们也告诉了大家实际上从本质上讲服务注册就是调用的对应接口nacos/v1/ns/instance&#xff…

浅谈一下mysql8.0与5.7的字符集

修改字符集 修改步骤 在MySQL8.0版本之前,默认字符集为1atin1,utf8字符集指向的是utf8mb3。网站开发人员在数据库设计的时候往往会将编码修改为ut8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL8.0开始,数据库的默认编码将改…

《强化学习导论》之6.5 Q-Learning

Q-Learning:Off-Policy TD Control强化学习的早期突破之一是开发了一种称为Q学习的非策略TD控制算法(Watkins,1989)。其最简单的形式,定义为(6.8)在这种情况下,学习的动作-值函数Q直接近似于最优动作-值函数&#xff0…

【C++PrimerPlus】第三章 处理数据

文章目录前言内容目录3.1 简单变量3.1.2 变量名3.1.2 整形3.1.3 整形short,int,long,long long3.1.4 无符号类型3.1.5 选择整形类型3.1.6 整形字面值3.1.7 C如何确定常量的类型3.1.8 char类型:字符和小整数3.1.9 bool类型3.2 const修饰符3.3浮点数3.3.1 书写浮点数3…

【存储】存储协议

存储协议SCSI协议SCSI协议和存储系统SCSI协议寻址方式iSCSI产生的原因--->基于IP网络的SCSIiSCSI启动器-->目标器模型iSCSI体系结构iSCSI和SCSI、TCP和IP的关系SAS协议为什么要发展SASSAS协议层次结构SAS特点SAS的可扩展性SAS与其他传输技术的比较FCFC协议结构FC拓扑结构…

vueCli实现一个自定义loader

生活只会欺负穷人,爱情也是 webpack 作为前端项目的打包工具,具有很好的学习价值。下面来学习下其中的 Loader Loader可以帮助webpack将不同类型的文件转换为webpack可识别的模块 webpack中Loader使用:https://www.webpackjs.com/loaders/…

用VAE生成图像

用VAE生成图像自编码器AE,auto-encoderVAE讲讲为什么是log_var为什么要用重参数化技巧用VAE生成图像变分自编码器是自编码器的改进版本,自编码器AE是一种无监督学习,但它无法产生新的内容,变分自编码器对其潜在空间进行拓展&#…