JVM系列五:本地方法接口和本地方法栈

1、本地方法接口

1.1、本地方法

  • 一个Native Method就是Java调用非Java代码的接口,使用native关键字修饰

  • 和abstract抽象方法不同,抽象方法是没有方法体,本地方法是有方法体,只不过不是Java语言实现。

1.2、为什么使用本地方法

  • 与Java以外的环境进行交互,这是主要原因;
  • 与OS交流,实现与底层系统的交互,有些方法直接用C语言;
  • Sun的解释器由C语言实现,使得它能像普通的C语言一样与外部交互;
  • 现在很少使用本地方法了,因为Java足够强大、完善了,除非与硬件有关,一般不用了。(比如Java程序驱动打印机等,直接用Java就可以了;通信也可以直接用Socket)


2、本地方法栈

  • Java虚拟机栈用于管理Java方法的调用,本地方法栈用于管理本地方法的调用;

  • 本地方法栈是线程私有的;

  • 允许被实现成固定/动态拓展内存大小(在内存溢出方面和Java虚拟机栈一样):

  1. 线程请求分配栈超过本地方法栈允许的最大容量,StackOverflowError;
  2. 动态拓展没有足够内存,OutOfMemoryError异常;
  • 本地方法用C语言实现,在执行引擎执行时,加载到本地方法库。

  • 某线程调用本地方法时,进入全新的、不受虚拟机限制的世界,这个世界和虚拟机有同样权限:

  1. 本地方法可以通过本地方法接口访问虚拟机内部运行时数据区;
  2. 可以直接使用本地处理器的寄存器;
  3. 可以直接从本地内存的堆中分配任意数量内存;
  • 不是所有JVM都支持本地方法,Java虚拟机规范中没有明确要求本地方法栈的使用语言、实现方式、数据结构等。如果不支持本地方法,就不用实现本地方法栈。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐