本地方法接口

什么是本地方法?

  • 一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其他的编程语言都有这一机制,比如在C++中,可以用extern "C"告知C++编译器去调用一个C的函数
  • 定义一个Native Method时,并不提供实现体,因为其实现是由非Java语言在外面实现的
  • 本地接口的作用是融合不同的编程语言为Java所用,他的初衷是融合C/C++程序

为什么要使用Native Method?

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

  • 与Java环境外交互

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

  • 与操作系统交互

    JVM支持者Java语言本身和运行时库,它是Java程序赖以生存的平台,它是由一个解释器和一些连接到本地代码的库组成。通过使用本地方法,得以用Java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用C语言写的

  • Sun’s Java

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

现状

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

本地方法栈(Native Method Stack)

  • Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用
  • 本地方法栈,也是线程私有的
  • 允许被实现成固定或者可动态扩展的内存大小(在内存溢出方面是相同的)
    1. 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverflowError异常
    2. 如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那Java虚拟机将会抛出一个OutofMemoryError异常
  • 本地方法是使用C语言实现的
  • 它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载本地方法库
  • 当某个线程调用一个本地方法时,它就进入一个全新的并且不再受虚拟机限制的世界。它和虚拟机拥有同样的权限
    1. 本地方法可以通过本地方法接口来访问虚拟机内部的运行时数据区
    2. 他甚至可以直接使用本地处理器中的寄存器
    3. 直接从本地内存的堆中分配任意数量的内存
  • 并不是所有的JVM都支持本地方法。因为Java虚拟机规范并没有明确要求本地方法栈的使用语言、具体实现方式、数据结构等。如果JVM产品不打算支持native方法,也可以无需实现本地方法栈
  • 在HotSpot JVM中,直接将本地方法栈和虚拟机栈合二为一

本地方法接口和本地方法栈相关推荐

  1. JVM之本地方法接口和本地方法栈

    本地方法接口和本地方法栈 1.什么是本地方法? 简单地讲,一个Native Method是一个Java调用非Java代码的接囗.一个Native Method是这样一个Java方法:该方法的实现由非J ...

  2. JVM---本地方法接口和本地方法栈

    本地方法接口 什么是本地方法? 简单地讲,一个 Native Method 是一个 Java 调用非 Java 代码的接囗.一个 Native Method 是这样一个 Java 方法:该方法的实现由 ...

  3. Java虚拟机(七)——本地方法接口与本地方法栈

    文章目录 本地方法接口 什么是本地方法? 为什么要使用本地方法? 本地方法栈 本地方法接口 什么是本地方法? 一个Native Method(本地方法)就是一个Java调用非Java代码的接口,,该方 ...

  4. UnityMirror学习笔记(5):NetworkBehaviour 参数和方法接口 与 钩子方法 与 一些注意点

    Mirror是一个简单高效的开源的Unity多人游戏网络框架. 官方文档链接: https://mirror-networking.gitbook.io/docs NetworkBehaviour是M ...

  5. 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )

    文章目录 I . 接口总结 II . 接口声明 III . 接口实现 IV . 接口中的方法 V . 接口中的属性 ( 变量 / 常量 ) VI . 接口中的属性属性覆盖 ( 变量 / 常量 ) VI ...

  6. JVM学习笔记之-运行时数据区概述及线程概述,程序计数器(PC寄存器),虚拟机栈(栈,局部变量表,操作数栈,动态连接,方法调用,方法返回地址等),本地方法接口,本地方法栈

    运行时数据区概述及线程概述 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JV ...

  7. JNI----Native本地方法接口

    Native本地方法接口 JNI:Java Native Interface 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序 native:凡是带native关键字的, ...

  8. 第 6 章 本地方法接口

    第 6 章 本地方法接口 1.本地方法 什么是本地方法? 简单地讲,一个Native Method是一个Java调用非Java代码的接囗 一个Native Method是这样一个Java方法:该方法的 ...

  9. 欧尼酱讲JVM(12)——本地方法接口

    位置图解 图中虚线框起来的就是本地方法接口 什么是本地方法 简单地讲,一个Native Method就是一个Java调用非Java代码的接口,一个Native Method是这样一个Java方法:该方 ...

最新文章

  1. How to think positively 如何培养正念
  2. 1009 产生数 2002年NOIP全国联赛普及组
  3. python处理teradata数据库_Python脚本连接Teradata数据库
  4. 用java编写保留两位小数_Java保留两位小数的几种写法总结
  5. php 情书,php趣味编程 - php输出笛卡尔情书的秘密
  6. 著名模拟鼠标点击软件小点点被收购
  7. python有必要看数据结构_盘点 Python 10 大常用数据结构(上篇)
  8. 图解后缀表达式的计算过程
  9. 做生意做不过中国,于是英国发动了鸦片战争
  10. FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库
  11. python selenium框架搭建_python + selenium 自动化框架搭建
  12. 就我不坑2 nyoj(简单模拟)
  13. 软件测试用例最简单最常见的模板和案例(QQ登陆,手机号,126邮箱)
  14. LaTeX 格式、字母、符号、公式 (总结)
  15. 洛谷 2184 贪婪大陆
  16. 第十一周项目一 类的继承填空
  17. 怎样快速提升自身的编程水平?
  18. shift+右键,没有“在此处打开命令窗口”选项
  19. ARM学习笔记--day10
  20. 几何光学学习笔记(13)- 4.2双平面镜成像

热门文章

  1. Python系列教程之学生信息管理系统
  2. linux 源码安装e1000e,linux安装网卡e1000e
  3. matlab的rvctools,rvctools 机器人工具箱,主要用于 仿真, 型很强。 matlab 270万源代码下载- www.pudn.com...
  4. java十五章_java:第十五章
  5. mouted能不能访问data中的数据_Vue(定时器)解决mounted不能获取到data中的数据问题...
  6. matlab 编arm_Matlab将实现STM32的代码生成、调试及建模功能
  7. 字符串 内存 函数的介绍与模拟实现
  8. PTA团体程序设计天梯赛-L2-019 悄悄关注
  9. redis怎么不让存byte_redis用bitfield存储的问题
  10. lookup函数和vlookup_5个实用案例告诉你,为什么说Lookup函数比vlookup更简单