JVM详解 -> native & 方法区
1. native 关键字
- native :凡是带了native关键字的,说明Java的作用范围达不到了,会调用底层C语言的库
- 进入本地方法栈;调用本地方法接口JNI,JNI作用:扩展Java的使用,融合不同的编程语言为Java所有,最初是为了融合C C++
- 在内存区域中专门开辟了一块标记区域:Native Method Stack,登记native方法
- 在最终执行的时候,在执行引擎中通过JNI加载本地方法库中的方法
- 目前该方法的使用越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机、Java系统管理生产设备等,在企业级应用中已经比较少见。因为现在的异构领域间通信很发达,比如可以使用Socket通信,也可以使用Web Service等。
2. PC寄存器
- 程序计数器:Program Counter Register
- 每一个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。
3. 方法区
- 方法区:Method Area
- 方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单的说,所有定义的方法的信息都保存在方法区,此区域属于共享区间;
- 静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中;但,实例变量存在堆内存中,和方法区无关
- static、final、Class模板、常量池