native
我们先来看看native关键字
jdk1.8 中的Class类中有这么一个方法:
public native boolean isInstance(Object obj);
我们不管这个方法是做什么的,但是一看这个方法我们会觉得很奇怪,因为Class是一个类,而不是一个接口,居然还存在没有方法体的方法,带着疑问继续了解;
那么native这个单词有本地的意思,被native修饰的方法称作本地方法,是一个原生态的方法,它的实现不在当前文件中。
那么为什么不在当前文件中实现呢?要搞得这么麻烦!!
首先我们了解了虚拟机,知道java跨平台是因为虚拟机,而虚拟机通过接口来和不同的平台对接,因此java语言有了跨平台的特性,但也是因为如此,java语言不能去对操作系统的底层进行访问和操作,需要来借助其他语言来实现(比如C/C++);
volatile
这个关键字说起来,估计要连带出一系列的问题(balabala.....)
简单的说Volatile关键字实际下有两层含义:
A)保证了内存的可见性;
B)禁止了指令的重排序;
何为内存的可见性,就是在我从主存中读取数据放到缓存区中的时候,我们修改数据,就会造成缓存中的数据和主内存中的数据不一致,而用volatile修饰的变量,一旦修改,就会写入内存中,而普通变量写入主内存的时机我们是不确定的;
指令的重排序:在我们写的代码中,jvm运行的时候并非都是按照代码的顺序来执行的,可以通过重排序来优化代码;
重排序:
int a=1;
int b=20;
int c=a+b;
我们先给a赋值,然后给b赋值,但是在运行时,jvm很有可能会先给b赋值,在给a赋值;
待更新...