`
huangmiao
  • 浏览: 4631 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
文章列表
String===HashCode Double源码因HashCode调用底层c。下次会详细阐述   源码解析: 先判断当前hash值是否为0 .如果为0 在判断他S听所存放的元数据的长度是否大于0、在把元数据放入到对象中。循环出h的大小。 注释:算出的是ascii的字符串的散列哈希。 在Effective Java 2 这本书中提到的方案是因为使用31这个数(素数)会让哈希更分散。(这个只需使用素数就可以了,java为了更规范所以采用了31)。  
^ 异或  两边的位不同时结果为1,否则为0 简诉:这个可以理解f(a!=b) 如果不同结果为1,否则为0例子:比如 2 ^ 3 == 10^11  第二位都是1所以第二位的0,,第二位不同所以为1 。最终结果01=1 ~ 非      0变1 1变0 简诉:取反。可连接if(!a) 1 变 0 0 变1 例子:比如~2 = 00000000000000000~30个0后面跟10  根据上诉换算出结果-3    & 与   两边位都是1为1,其余是0 简诉:可直接理解为必须(and),在if判断&& 2边都相同才能为1 例子: 2&3 == ...
利用CAS(compare and Swap)实现。在多CPU的情况也是有锁的、CAS是底层的机器实现。汇编命令compxchg完成的。 在openJdk实现有   先判断是否是多CPU。 ecx -->计数器(CPU寄存器) eax-->cpu的累加器 edx-->余数 具体操作是先把compare放到cpu寄存器。。在比较。最后如果是多CPU在加锁。后面调用汇编命令compxchg完成CAS。 具体理解可能有点出入。欢迎指正哈
Global site tag (gtag.js) - Google Analytics