Native、方法区
重要!!
初入思考:
一个java类Thread既不是抽象类也不是接口,里面放着这个方法,不报错???
因为带了native关键字
native关键字:
凡是带了它的方法,说明java的作用范围达不到了,会去调用c语言的库。
会进入本地方法栈,调用本地方法接口 JNI(java native interface)。
本地方法接口(JNI)的作用:就是扩展java方法的使用,融合不同的编程语言为java所用
历史背景:
java一开始想调用C,C++的程序,它在内存区域中专门开辟了一块标记区域:Native Method Stack, 登记 native 方法。在最终执行的时候,加载本地方法库中的方法通过JNI。
但是一般用不到,在连接硬件的时候会用到,例如java程序驱动打印机。
现在想调用其他接口(eg:python)的方式: Socket,WebService, http
总结:
Native Method Stack (本地方法栈)
他的具体做法是Native Method Stack 中登记native方法,在(Execution Engine)执行引擎的时候加载Native Libraies(本地库)
PC寄存器
程序计数器:Program Counter Register
每个线程都有一个程序计数器,是线程私有的,就是一个指针,只想方法去中的方法字节码(用来存储指向下一条指令的地址),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计
方法区(Method Area方法区)
重要
方法区是所有线程共享的,所有字段和方法字节码,以及一些特殊方法 ,如构造函数,接口代码也在此定义,简单说:所有定义的方法的信息都保存在该区域,此区域属于共享区间
方法区存的东西:带有static、final、Class模板(加载器),常量池
常量池??
对象在加载的时候,在类加载的时候是什么样子的??
加载的区间,栈堆方法区
有一篇博客专门讲的Java对象在内存中实例化的过程