本地方法接口
连接Java方法与本地方法,使Java方法可以调用更为底层的本地方法
为什么需要调用更为底层的本地方法?
Java在与操作系统进行交互时权限不够,无法访问操作系统层面或者硬件层面上的信息,所以需要借助由C/C++语言实现的本地方法完成对操作系统的交互,因为C/C++语言相对于Java语言有直接与操作系统交互的权限。
什么是本地方法?
使用native关键字修饰的方法,该方法没有方法体,因为该方法具体的实现是借助C/C++语言完成的。native关键字不能与abstract关键字一起使用,abstract关键字表示方法的方法体没有被实现,但是native方法的方法体需要被实现,两者相互矛盾。
常见的native方法
hashCode()方法:获取对象的哈希值
getClass()方法:获取对象的Class对象
notify()方法:唤醒对象的一个等待的线程
notifyAll()方法:唤醒对象的所有等待的线程
wait(long timeout)方法:使当前对象的线程进入等待,并指定等待时间
执行引擎
Java虚拟机的核心,用于将字节码指令解释为对应操作系统的机器指令(二进制表示的计算机可以直接识别并执行的指令)
解释器和JIT编译器是什么?
解释器:Java虚拟机启动时运行,将字节码文件进行逐行翻译(边运行边翻译),变为计算机可以直接识别的机器指令。
JIT编译器(Just In Time Compiler):即时编译器,将字节码文件一次性直接编译为计算机可以识别的机器指令,并保存在计算机中,方便下一次对该字节码文件的使用。
JIT编译器什么时候被使用?
Java虚拟机会对被编译的代码进行检测,当发现某一段代码在一段时间内被执行的次数较多时,使用频率较高时,就会对该段代码进行JIT编译。
JIT编译器执行效率高为什么还要用解释器?
JIT解释器是在将翻译后的机器指令保存在计算机之后才效率高,如果所有的代码都采用JIT编译器,那么如果代码过多的情况下,当Java虚拟机启动时,由于需要将所有的代码先翻译一遍,所以花费时间可能过长,导致Java虚拟机执行效率降低,所以Java虚拟机通常采用解释器和JIT编译器相结合的方式对字节码文件进行翻译。