本地方法接口
-
Native Method是一个java调用非java代码的接口.
-
A native method is a Java method whose implementation is provided by non-java code
-
定义本地方法不提供实现提类似接口,其实现由非java语言实现
-
需要注意的是:标识符native可以与其它java标识符连用,但是abstract除外
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 Method
- 与Java环境的交互
- 与操作系统的交互
- Sun’s Java
本地方法栈
-
java虚拟机栈值管理java方法的调用,本地方法栈用于管理本地方法的调用
-
本地方法栈也是线程私有
-
允许被实现固定或者可动态扩展的内存大小 在内存溢出方面相同
- 如果线程请求分配的栈容量超过本地方法栈允许最大容量,java虚拟机将会抛出StackOverflowError
- 如果本地方法栈动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或没有足够内存创建新的本地方法栈会抛出OOM
-
本地方法是使用其他语言实现如C和C++
-
具体做法是Native Method Stack中登记的native方法,在Execution Engine执行时加载本地方法库
-
当某一个线程调用本地方法时,就不在受JVM控制,他与JVM拥有同样的权限
- 本地方法可以直接通过本地方法接口来访问虚拟机内部运行时数据区
- 可以直接使用本地处理器的寄存器
- 直接从本地内存的堆中分配任意数量的内存
-
并不是所有JVM都支持本地方法,JVM规范没有明确要求本地方法栈使用的语言,具体实现方式和数据结构.如果JVM产品不打算支持native方法,也可以无需实现本地方法栈
-
Hotspot JVM中 直接将本地方法栈和虚拟机栈合二为一