首页 > 其他分享 >JVM基础篇(四)-JVM结构-本地方法接口

JVM基础篇(四)-JVM结构-本地方法接口

时间:2023-12-24 19:02:09浏览次数:43  
标签:Java 本地 交互 接口 JVM 方法 native

本地方法

本地方法:Native Method

"A native method is a Java method whose implementation is provided by non-java code."

(本地方法是一个非Java的方法,它的具体实现是非Java代码的实现)

一个Native Method是一个Java调用非Java代码的接囗。该方法的实现由非Java语言实现,这个特征并非Java所特有,很多其它的编程语言都有这一机制。本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序。

JVM基础篇(四)-JVM结构-本地方法接口_JVM

Native方法代码编写举例:

public class IhaveNatives {
    public native void Native1(int x);
    native static public long Native2();
    native synchronized private float Native3(Object o);
    native void Natives(int[] ary) throws Exception;
}

注意:标识符native可以与其它java标识符连用,abstract除外

Native Method交互场景

Java使用起来非常方便,然而有些层次的任务用Java实现起来不容易,或者对程序的效率很在意时。

与Java环境的交互

有时Java应用需要与Java外面的环境交互,这是本地方法存在的主要原因。如:java与操作系统或某些硬件交换信息时的情况。本地方法提供一些非常简洁的接口,而且Java开发者无需去了解Java应用之外的繁琐的细节。

与操作系统的交互

JVM支持着Java语言本身和运行时库,它是Java程序赖以生存的平台,它由一个解释器(解释字节码)和一些连接到本地代码的库组成。然而不管怎样,它毕竟不是一个完整的系统,它经常依赖于一底层系统的支持。这些底层系统常常是强大的操作系统。通过使用本地方法,我们得以用Java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用c写的。还有,如果我们要使用一些Java语言本身没有提供封装的操作系统的特性时,我们也需要使用本地方法。

Sun's Java

Sun的解释器是用C实现的,这使得它能像一些普通的C一样与外部交互。jre大部分是用Java实现的,它也通过一些本地方法与外界交互。例如:类java.lang.Thread的setpriority()方法是用Java实现的,但是它实现调用的是该类里的本地方法setpriorityo()。这个本地方法是用C实现的,并被植入JVM内部,在Windows 95的平台上,这个本地方法最终将调用Win32 setpriority()ApI。这是一个本地方法的具体实现由JVM直接提供,更多的情况是本地方法由外部的动态链接库(external dynamic link library)提供,然后被JVM调用。

就业情况

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

标签:Java,本地,交互,接口,JVM,方法,native
From: https://blog.51cto.com/u_15520917/8956582

相关文章

  • 视频监控LiteCVR可视化云平台接口支持获取视频帧率与编码格式
    2023年,AI视频监控技术迎来了显著的发展和成果,为安全领域和其他行业带来更智能、高效的解决方案,其中边缘AI发展也十分显著。边缘计算中AI的广泛应用将使设备能够在本地处理数据,而不必依赖云服务器,从而实现更快的响应时间和更强的隐私保护。 LiteCVR可支持设备通过国标GB28181、......
  • Spring Boot 核心接口之 Envirnoment
    SpringBoot核心接口之Envirnoment转载自:https://zhuanlan.zhihu.com/p/357050965?utm_id=0SrpingBoot中我们使用EnvironmentAware注入Environment对象后,可以在Environment中获得系统参数,命令行采参数,文件配置等信息。Environment是如何存储,管理这些值的呢?变量......
  • vscode+xdebug+phpenv本地调试php代码
    php环境变量先设置环境变量,找到php目录在vscode里安装phpdebug插件点击插件按钮,搜索phpdebug,找到这里标有Xdebug的,点击安装开启Xdebug组件找到对应版本的php去配置php.in文件把这个放到php.ini的最后,如果里面有则根据情况替换即可,端口号要和下面的vscode里面的统一......
  • C语言全局变量的extern+typedef函数指针+uvm_queue/pool/config_db/resource_db/barri
    C语言全局变量的extern全局变量在不同的文件引用,需要加上extern,才能引用到。如果没有extern关键词,则认为是一个定义,而不是引用,引发同名冲突。函数也是一样。要在本文件引用其它文件的函数,需要增补extern关键字。而其它文件,声明和定义过该函数。typedef函数指针https://zhuan......
  • linux-网络接口的绑定与组合(bond 网桥的创建)
    网络接口的绑定一、虚拟接口将多个网络逻辑接口连接在一起:1、实现冗余、避免故障2、提高吞吐率原理:非在物理网卡上设置、而是通过多个物理网卡聚合成一个虚拟的网卡(外部网络访问的就是本机的虚拟网卡的地址)二、通过networkmanger实现绑定模式balanceactive-backup--......
  • JVM分析+1,+=1,++的效率
    工具准备ideajclasslib插件准备src/main/java/com/xiaofengs/Main.javapublicclassMain{publicstaticvoidmain(String[]args){inti=0,j=0,k=0;i++;j=j+1;k+=1;}}接着使用javac将其编译,命令i如下javacsrc/......
  • JVM虚拟机系统性学习-JVM调优实战之内存溢出、高并发场景调优
    调优实战-内存溢出的定位与分析首先,对于以下代码如果造成内存溢出该如何进行定位呢?通过jmap与MAT工具进行定位分析代码如下:publicclassTestJvmOutOfMemory{publicstaticvoidmain(String[]args){List<Object>list=newArrayList<>();for(int......
  • java接口自动化系列(06):常用变量解析到map
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/15867903.html添加工具类常用变量解析到map,方便后面解析初始化sql或者入参的时候对变量进行替换。VariableUtil.javapackagecom.qzcsbj.autotest.utils;importcom.qzcsbj.autotest.entity.Variable;import......
  • 后端 API 接口文档 Swagger 使用指南
    后端API接口文档Swagger使用指南转载自:https://zhuanlan.zhihu.com/p/98560871前言一:swagger是什么?二:为什么要使用swaager?2.1:对于后端开发人员来说2.2:对于前端开发来说2.3:对于测试三:如何搭一个swagger3.1:引入swagger的依赖3.2:springBoot整合swagg......
  • java接口自动化系列(05):测试数据注入到测试方法
     注入测试数据这里我们是数据驱动方式,把数据注入到测试方法上一篇我们已经把用例数据封装到对象并放到list中,这里我们把用例对象list中的对象分别放到Object类型的一维数组中,再把一维数组添加到新对象类型一维数组的list中然后我们在测方法中打印获取到的用例数据,看获取到的......