native
-
start0
private native void start0();
native:凡是带了native关键字的,说明java的作用范围达不到了。去调用C/C++代码。
会进入本地方法栈
-
本地方法接口(JNI,Java Native Interface)
-
JNI作用,扩展Java的使用,想让C/C++编程语言为Java所用。
-
它在内存区域中专门开辟了标记区域:Native Method Stack(本地方法栈),登记native方法
-
在最终执行的时候,通过JNI,加载本地方法库中的方法。
例如,使用Java操作打印机等硬件资源。一般遇不到这种操作。
那么问题是调用其他语言的方案都要这样吗?自然是不。
- 解决方案:调用其他接口
- 比如,Socket实现网络通信,http等等协议。消除语言障碍。
方法区(重点,就是下面的一句话)
-
方法区被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数。
-
所有定义方法的信息都保存在该区域,此区域属于共享区域(毕竟方法只需要一份就够了,多了就是资源浪费!)。
-
静态变量,常量,类信息(构造方法,接口定义),运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关。实例的引用放在栈中
static,final,Calss模板,常量池->方法区中
实例变量->堆中
实例的引用->栈中
参考自狂神说