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虚拟机栈一样):
- 线程请求分配栈超过本地方法栈允许的最大容量,StackOverflowError;
- 动态拓展没有足够内存,OutOfMemoryError异常;
-
本地方法用C语言实现,在执行引擎执行时,加载到本地方法库。
-
某线程调用本地方法时,进入全新的、不受虚拟机限制的世界,这个世界和虚拟机有同样权限:
- 本地方法可以通过本地方法接口访问虚拟机内部运行时数据区;
- 可以直接使用本地处理器的寄存器;
- 可以直接从本地内存的堆中分配任意数量内存;
-
不是所有JVM都支持本地方法,Java虚拟机规范中没有明确要求本地方法栈的使用语言、实现方式、数据结构等。如果不支持本地方法,就不用实现本地方法栈。
-
在HotSpot JVM中,直接将本地方法栈和虚拟机栈合二为一。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。