Native和方法区
Native
Native概述
Native:凡是带了Native关键字,则说明超过了Java的作用范围,进而去调用底层C语言的库
Native修饰的东西都会进入本地方法栈,然后调用本地方法接口(Java Native Interface,JNI),非Native修饰的进入Java栈
本地方法接口(JNI)的作用:扩展Java的功能,能够调用不同的编程语言提供给Java去使用
Java在内存区域中专门开辟了一块标记区域:本地方法栈Native Method Stack,记录native方法,在最终执行的时候,通过JNI加载本地方法库中的方法
应用场景:
与硬件相关的应用
Java程序驱动打印机,系统管理生产设备,etc
在企业级应用较为少见
目前异构中可以使用socket、httpservice,etc
Native Method Stack
它的具体做法是Native Method Stack中登记native方法,在(Execution Engine)执行引擎执行的时候加载Native Libraies【本地库】
程序计数器
程序计数器:Program Counter Register
每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计
方法区
Method Area方法区
方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享区间
静态变量static、常量final、类信息Class(构造方法、接口定义)、运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关
关键字:
static、final、Class模板、常量池