HASHMap的源码解析

101 阅读1分钟

1根据哈希值查哈希表

image.png 2.哈希桶的个数必须 是2的N次方,初始默认16个,最大2的31次方 3.如果没有初始化,哈希桶并没有创作出来 4.按位&, hash&(length - 1), 2的n次方-1的二进制都是11111..., 所以进行&操作会拿到数组下标。分布还是均匀的。

image.png

5.自动扩容,大于本身的0.75,则扩容。16*0.75=12.把所有迁移到新的哈希表中。

6.java7中死锁 7.java8中的改进

字符串的不可变性

final只能指向该数组,但数组内里可以改变,(很难) 为了安全的使用string,java生命周期中一个数值只有一个对应的hashcode。所以改变必须改变相应hashcode,创建新对象。

image.png image.png

Stringbuild不保证线程同步(不安全),Stringbuffer是线程安全(多线程时使用)

字符串编码

unicode从U+0000到U+FFFF

java内部程序编码是UTF-16,都用utf8编码

image.png 解码编码 都是用来不同的字符集出现错误。 搜索 size: "不会改变" xxx:xsl(表) xxx.pfd

类型和反射

Java的类和class

rpc 远程功能调用;

image.png

image.png 一个类就是一个说明书,静态变量就是一个说明书,归属于这个对象。

image.png

image.png

类加载与ClassLoader

animal - >cat -> whitecat->

image.png 说明书是classloader加载出来 文件的本质是字节流。

image.png

classloader是级联的 任何一个类加载器加载都会问父亲,父亲返回类加载模型,自己就不会再尝试加载,除非父亲为空。

java语言规范告诉你是不是合法的java语言 虚拟机规范是告诉你如何在java虚拟机上跑

反射与Spring反射源码浅析

image.png