1. native。
- 在看JDK源码时,想知道Math包里比如cos, sin等函数是如何实现的(猜想的是用他们在0点的泰勒展开式近似),但是打开之后却发现只有一个函数声明,并且有关键字native,所以就Google了一个大家的解释:
- 表示该方法为本地方法,实际是说这个方法是由c/c++实现的,并且被编译成了DLL,由java来调用。
- Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI(java native interface)接口调用其他语言来实现对底层的访问。
2. volatile.
- 一般java内存会分为(方法区,堆)(虚拟机栈,本地方法栈,程序计数器)等不同的内存区域;
- As we all know, 系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。
- 如果一个变量被标识为了volatile,每次使用改变量时都要从主存储器中读出;同样的,写该变量时要写入主存储器中。
- 含有此关键字的变量具有两种特性:
- 保证此变量对于所有线程是可见的;
- 禁止指令重排序优化。