Java源码阅读[1]
一、注释@code
@code: {@code text} 将文本标记为code。
{@code text} 会被解析成 text
。
将文本标记为代码样式的文本,在code内部使用 < 、> 等不会被解释成html标签, code标签有自己的样式。
一般在Javadoc中只要涉及到类名或者方法名,都需要使用@code进行标记。
二、Amortized time
定义:即使一项操作可能要花费比给定时间更长的时间,但多项操作之间的时间也会相平衡以提供上述运行时间。
例如,自调整大小的数组就是这样的例子。 插入时,需要O(n)来调整数组大小,但是在许多插入中,每个插入平均需要O(1)。
三、transient关键字
一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。
在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
四、modCount
modCount属于java.util.AbstractList类
modCount这个参数记录了某个List改变大小的次数,如果modCount改变的不符合预期,那么就会抛出异常。
在一些非多线程安全的情况下,通过这个modCount参数可以检测是否有出现混乱的情况,并自动抛出异常。
五、Java本地方法Native Method
一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。
java使用起来非常方便,然而有些层次的任务用java实现起来不容易,或者我们对程序的效率很在意时,就需要调用一些底层方法或其他方法。更多细节点击这里
六、@HotSpotIntrinsicCandidate
JDK的Object类源码中,被@HotSpotIntrinsicCandidate标注的方法,在HotSpot中都有一套高效的实现,该高效实现基于CPU指令,运行时,HotSpot维护的高效实现会替代JDK的源码实现,从而获得更高的效率。
七、E,K,V,T,U,S
E - Element (在集合中使用,因为集合中存放的是元素)
T, U, S - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的java类型