为什么需要固有函数?
Java 是不支持宏的, 从抽象性上来说, Java少了一半的表达能力(按正则序展开),大体上来说,这并不太影响Java作为一门生产级的语言,但是在某些特定的地方,消除方法调用过程是非常必要的,比如Math包中的一些函数,亦或者JUC的Atomic类的compareAndSwap方法。所以Java提供了更加底层的(但并不"均一")的特定 – 固有(intrinsic)函数
什么是固有函数。
固有函数大概相当于C++ 的宏或者inline函数, 即消去了函数调用过程的函数, 不过有的固有函数优化的更加极致,比如compareAndSwap的固有函数会将底层汇编原语直接内联
怎么用?
一般来说,固有函数并不影响我们使用他们,只不过写的时候注意一下就行了,比如说我之前特别不喜欢Math方法, 宁愿自己手写Math.max,了解了固有方法之后,Math.max显然会比自己手写的效率更高(虽然可能只是一点点)。
还有就是compareAndSet方法,不应该使用一个局部变量来持有结果, 而应该直接放到if的判断里(如果有可能的话), 不然内联带来的性能提升可能会被浪费(虽然编译器优化可能会直接优化掉局部变量持有结果这一步,不过在优化级别比较低的情况下,应该发生的概率很低)。