精华内容
参与话题
问答
  • Java本地方法

    千次阅读 2017-04-21 00:08:06
    什么是本地方法在Java中,有些方法涉及到与操作系统交互,获取和使用操作系统的硬件或软件的资源,单纯的用Java实现要么实现很困难,或者不能实现,这时候就要使用本地方法本地方法就是用其他语言写的方法,然后在...

    什么是本地方法

    在Java中,有些方法涉及到与操作系统交互,获取和使用操作系统的硬件或软件的资源,单纯的用Java实现要么实现很困难,或者不能实现,这时候就要使用本地方法,本地方法就是用其他语言写的方法,然后在JVM中调用

    本地方法的定义

    本地方法在很多类中都有所见,比如Object类的clone方法

    protected native Object clone() throws CloneNotSupportedException;

    所以在使用clone方法的时候,实际上会调用C语言写的方法

    什么时候使用本地方法

    1. 你的应用需要访问的系统特性和设备通过Java平台无法实现
    2. 你已经有了大量的测试过和调试过的用另一种语言编写的代码,并且知道如何将其导出到所有目标平台上
    3. 通过基准测试,你发现所编写的Java代码比用其他语言编写的代码要慢的多

    Java平台有一个用于和本地C代码进行互相操作的API,称为Java本地接口(JNI)

    从Java程序中调用C函数

    首先定义一个本地方法

    public class HelloNative {
    
        public static native void greeting();
    
    }

    本地方法对应的C函数命名规则
    1. 使用完整的Java方法名,比如HelloNative.greeting.如果类属于某一个包,则加上报名,比如com.hehe.HelloNative.greeting
    2. 用下划线替换掉所有的句号,并加上Java_前缀,比如,Java_HelloNative_greeting
    3. 如果类名含有非ASCII字母或数字,如’_’,或是大于’\u007F’的unicode字符,用_0xxxx来代替他们,xxxx是该字符的Unicode值的4个十六进制数序列
    Java提供了一个工具javah来生成本地C函数的一个头文件,里面包含了本地函数的声明,我们可以使用它
    先编译HelloNative

    javac HelloNative.java

    再使用javah生成C头文件

    javah HelloNative

    生成一个HelloNative.h

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class HelloNative */
    
    #ifndef _Included_HelloNative
    #define _Included_HelloNative
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     HelloNative
     * Method:    greeting
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_HelloNative_greeting
      (JNIEnv *, jclass);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    使用VC++6.0编写HelloNative.c
    这里写图片描述

    这里写图片描述
    编译到系统库
    上面的HelloNative.h中的jni.h是JDK带的头文件,所以编译的时候包含它

    展开全文
  • java方法和本地方法

    2019-06-17 10:31:51
    JAVA中有两种方法: JAVA方法和本地方法 JAVA方法 是由JAVA编写的,编译成字节码,存储在class文件中 本地方法 是由其它语言编写的,编译成和处理器相关的机器代码 本地方法保存在动态链接库中,即.dll(windows系统)...

    JAVA中有两种方法: JAVA方法和本地方法

    JAVA方法 是由JAVA编写的,编译成字节码,存储在class文件中

    本地方法 是由其它语言编写的,编译成和处理器相关的机器代码

    本地方法保存在动态链接库中,即.dll(windows系统)文件中,格式是各个平台专有的

    JAVA方法是与平台无关的,但是本地方法不是

    运行中的JAVA方法调用本地方法时,虚拟机装载包含这个本地方法的动态库的,并调用这个方法

    通过本地方法,JAVA程序可以直接访问底层操作系统的资源,如果你这样用,你的程序就变成平台相关了,因为本地方法的动态库是与平台相关的,此外使用本地方法还可能把程序变得和特定的JAVA平台实现相关

    一个本地方法接口——JAVA本地接口JNI——使得本地方法可以在特定主机系统的任何一个JAVA平台实现上运行

    JAVA给人们提供了选择的机会

    如果希望使用特定主机上的资源,它们又无法从JAVA API访问,那么可以写一个平台相关的JAVA程序来调用本地方法

    如果希望保证程序的平台无关性,那么只能通过JAVA API来访问底层系统资源
    https://blog.csdn.net/asdasdasd123123123/article/details/81910116

    展开全文
  • 文章目录本地方法接口本地方法栈 (Native Method Stack) 本地方法接口 什么是本地方法 一个本地方法就是一个 Java 调用非 Java 代码的接口,一个本地方法的实现由非Java 语言实现,比如 C 语言。这个特征并非 Java...

    本地方法接口

    在这里插入图片描述

    什么是本地方法

    • 一个本地方法就是一个 Java 调用非 Java 代码的接口,一个本地方法的实现由非Java 语言实现,比如 C 语言。这个特征并非 Java 特有,很多编程语言都有这一机制。
    • 在定义一个本地方法时,并不提供实现体(有些想定义一个接口),因为其实体是由非 java 语言在外面实现
    • 本地接口的作用是融合不同的编程语言为 Java 所用,它的初衷是融合 C/C++ 程序。
      在这里插入图片描述
      为什么要使用 Native Method
    • 与环境交互
      有时 Java 应用需要与 Java 外面的环境交互,这是本地方法存在的主要原因。如 Java 需要与一些提层系统,操作系统或硬件交互信息时,本地方法就是这样一种交流机制:提供一个简洁的接口,无需我们去了解 Java 应用之外的繁琐的细节。
    • 与操作系统交互
      JVM 支持着 Java 语言本身和运行时库,它由一个解释器(解释字节码) 和一些连接到本地代码的库组成,但还需要依赖底层操作系统。通过使用本地方法,可以用 Java 实现了 jre 与底层系统的交互,甚至 JVM 的一些部分就是用 C 写的。还有,如果要使用一些 Java 语言本身没有提供封装的操作系统特性时,也要使用本地方法。
    • Sun‘s Java
      Sun 的解释器是用 C 实现的,这使得它能像一些普通的 C 一样与外部交互。jre 大部分是用 Java 实现的,它也通过一些本地方法与外界交互。例如:java.lang.Thread 的 setPriority() 方法是用 Java 实现的,但是它实现调用的是该类里的本地方法 setPriority()。这个方法是用 C 实现的,并植入 JVM 内部,再 WIndows 95 平台上,这个本地方法最终将调用 Win32 SetPriority() API 。这是一个本地方法的具体实现由 JVM 直接提供,更多的情况是本地方法由外部的动态链接库提供,然后被 JVM 调用。

    本地方法栈 (Native Method Stack)

    • 本地f方法栈用于管理本地方法的调用,也是线程私有,允许被实现成固定或者可动态扩展的内存大小。
      在这里插入图片描述

    • 本地方法是使用 C 语言实现的,具体做啊是 Native Method Stack 中登记 native 方法,在 Execution Engine 执行时加载本地方法库。

    • 当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。它和虚拟机拥有同样的权限:
      本地方法可以通过本地f昂发接口来访问虚拟机内部的运行时数据区
      它甚至可以直接使用本地处理器中的寄存器
      直接从本地内存的堆中分配任意数量的内存

    • 并不是所有的 JVM 都支持本地方法。因为 Java 虚拟机规范中并没有明确要求本地方法栈的使用语言、具体实现方式、数据结构。所以如果 JVM 产品不支持本地方法也无需实现本地方法栈。

    • 在 HotSopt JVM 中,直接将本地方法栈和虚拟机栈合二为一。

    展开全文
  • 7.本地方法

    2020-06-15 20:12:08
    本地方法接口 在讲Java虚拟机运行时数据区中本地方法栈之前,我们先来说说运行时数据区之外的一个叫本地方法接口的东西简称JNI(Java Native Interface) 简单来讲,一个Native Method就是一个java调用非java代码的...
  • 关于本地方法栈的详细介绍

    千次阅读 2018-10-23 23:11:20
    本地方法栈(Native Method Statck)与虚拟机所发挥的作用是非常相似的,它们之间的的区别不过是虚拟机栈为虚拟机执行java方法(也就是字节码)服务,而本地方法栈则为虚拟机是有的Native方法服务。在虚拟机规范中对...
  • JAVA中有两种方法:JAVA方法和本地方法 JAVA方法是由JAVA编写的,编译成字节码,存储在class文件中 本地方法是由其它语言编写的,编译成和处理器相关的机器代码 本地方法保存在动态链接库中,即.dll(windows系统)...
  • JAVA本地方法

    万次阅读 多人点赞 2010-07-21 21:01:00
    一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。...
  • 建议:谨慎的使用本地方法

    千次阅读 2018-07-16 10:25:22
    Java Native Interface(JNI)允许Java应用程序可以调用本地方法,所谓本地方法是指用本地程序设计语言(比如C或者C++)来编写的特殊方法。本地方法在本地语言中可以执行任意的计算任务,并返回到Java程序设计语言。...
  • 最近在看《深入理解Java虚拟机》,书中给了几个例子,比较好的说明了几种...Java程序运行时,数据会分区存放,JavaStack(Java栈)、 heap(堆)、method(方法区)。1、Java栈Java栈的区域很小,只有1M,特点是存...
  • 本地方法接口

    2020-08-26 11:52:00
    本地方法接口 自己制作的jvm中本地方法接口的思维导图,免费分享,每个知识点中皆有详细的博文,内含详细的解释
  • JAVA方法和本地方法

    千次阅读 2016-09-10 18:36:51
    JAVA中有两种方法:JAVA方法和本地方法JAVA方法是由JAVA编写的,编译成字节码,存储在class文件中本地方法是由其它语言编写的,编译成和处理器相关的机器代码本地方法保存在动态链接库中,即.dll(windows系统)文件中...
  • 本地方法栈与Native方法

    千次阅读 2018-08-18 10:07:38
    刚开始看《深入理解Java虚拟机》,在里面看到一句话,不是很理解:本地方法栈与虚拟机栈所发挥的作用时非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机...
  • JAVA中有两种方法:JAVA方法和本地方法 JAVA方法是由JAVA编写的,编译成字节码,存储在class文件中 本地方法是由其它语言编写的,编译成和处理器相关的机器代码 本地方法保存在动态链接库中,即.dll(windows系统)...
  • 本地方法栈及native方法

    千次阅读 2017-09-26 11:20:06
    看到虚拟机栈和本地方法栈的区别的时候有点疑惑,因为本地方法栈为虚拟机的Native方法服务。以下转载一篇关于native方法的介绍: http://blog.csdn.net/wike163/article/details/6635321 ——————————...
  • JAVA核心知识点--本地方法

    万次阅读 2017-04-19 10:10:27
    什么是本地方法 二.为什么要使用本地方法 三.JVM怎样使本地方法跑起来 一. 什么是本地方法 简单地讲,一个本地方法(Native Method)就是一个Java调用非java代码的接口。 一个本地方法是这样一个java方法:该...
  • Android jni代码注册本地方法

    万次阅读 2017-01-20 20:30:06
    Android 开发中有时需要调用本地方法,这就需要注册本地方法,而注册的方法有两种: RegisterNatives注册使用javah生成规范的头文件,然后编写对应的源文件。 先看一下java文件 Hello.java,这里面有一个native方法...
  • java 本地方法

    万次阅读 2017-11-18 18:29:24
    暂无
  • JVM本地方法栈及native方法

    千次阅读 2018-01-27 09:01:57
    看到虚拟机栈和本地方法栈的区别的时候有点疑惑,因为本地方法栈为虚拟机的Native方法服务。以下转载一篇关于native方法的介绍: http://blog.csdn.net/wike163/article/details/6635321 ——————————...
  • Java调用本地方法又是怎么一回事

    千次阅读 2017-07-10 17:28:23
    JNIJNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少量汇编编写,在执行Java字节码时如果遇到有某个方法...

空空如也

1 2 3 4 5 ... 20
收藏数 1,547,283
精华内容 618,913
关键字:

本地方法