摘要: ThreadLocal ThreadLocal存储当前线程私有的数据 Thread类中有一个默认(包级别)访问权限的字段:ThreadLocals,它是ThreadLocalMap类型的。 ThreadLocal.ThreadLocalMap threadLocals = null; ThreadL 阅读全文
posted @ 2021-06-18 22:02 keepkeep 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 方法调用 确定被调用方法的版本 包括解析调用和方法分派 解析调用 对于在那些"编译器可知,运行期不可变"的方法,主要包括静态方法和私有方法。前者与类型直接关联,后者外部不可访问,决定了它们都不能通过继承或者别的方式重写出其它版本,适合在类加载阶段进行解析。 对应的字节码指令:invokestatic 阅读全文
posted @ 2021-06-18 16:19 keepkeep 阅读(60) 评论(0) 推荐(0) 编辑
摘要: ArrayList ArrayList是基于数组的实现,支持随机访问,可以动态扩容 初始化: 可以用带参的构造函数指定初始值,如果传入的参数是正数就创建指定容量的数组,如果是0就创建一个空数组,如果是负数,就抛出异常 默认大小是10 添加元素: 添加元素时使用ensureCapacityIntern 阅读全文
posted @ 2021-06-17 15:22 keepkeep 阅读(51) 评论(0) 推荐(0) 编辑
摘要: HashMap HashMap的内部包含了一个Node类型的数组table,Node是静态内部类,实现类Map.Entry接口,有四个主要属性:key、value、next、hash。也就是说table数组的每个位置看做是一个桶,一个桶可以存储一个单向链表。HashMap 使用拉链法来解决冲突,同一 阅读全文
posted @ 2021-06-17 13:51 keepkeep 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 装饰模式和静态代理在实现上很接近,它们的区别可以从功能和具体场景分析: 装饰模式是强调对原有类型自身能力的拓展;代理模式强调对功能的控制; 装饰模式是继承的一种替代方案,与被装饰者是is-a的关系,符合里氏替换法则;代理模式是一种委托模式,将被代理角色的功能委托给另外一个角色去实现和控制; 装饰模式 阅读全文
posted @ 2021-06-15 10:35 keepkeep 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 自动内存管理 特指java堆、方法区两个区域的内存的分配与回收。 判断对象是否"存活" 引用计数算法 在对象中添加一个引用计数器,每当一个地方引用它时,计数器加一;当引用失效时,计数器减一;在任何时候,计数器为0的对象不可能再被使用。 主流的java虚拟机中没有使用引用计数算法来管理内存,因为有很多 阅读全文
posted @ 2021-03-16 19:51 keepkeep 阅读(86) 评论(0) 推荐(0) 编辑
摘要: ReentrantReadWriteLock ReentrantReadWriteLock:读写锁,在执行读操作时可以异步执行。读-读异步,读-写异步,写-写异步。 ReentrantLock是完全互斥排他的,效率低; ReentrantReadWriteLock有两个锁: 读相关的锁:共享锁 写相 阅读全文
posted @ 2021-03-11 20:51 keepkeep 阅读(73) 评论(0) 推荐(0) 编辑
摘要: Reentrantlock类 JDK1.5新增的ReentrantLock类,重入锁。 ReentrantLock是独占锁且可重入的 ReentrantLock和synchronized 相同点: ReentrantLock和synchronized都是独占锁,只允许线程互斥的访问临界区 Reent 阅读全文
posted @ 2021-03-11 20:46 keepkeep 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 对象的内存布局 在HotSpot虚拟机中,对象在堆内存中的存储布局可以划分为三个部分:对象头Header、实例数据Instance Data和对齐填充Padding 对象头 HotSpot虚拟机的对象头有两类信息: 对象自身的运行时数据 类型指针 对象自身的运行时数据: 哈希码、GC分代信息、锁状态 阅读全文
posted @ 2021-03-09 15:28 keepkeep 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 对象的创建 当虚拟机遇到一条 字节码new指令时, 检查这个指令的参数是否在常量池中定位到一个类的符号引用; 并检查这个符号引用代表的类是否已被 加载、解析、初始化过,如过没有,必须执行相应的类加载过程; 在类加载检查通过之后,虚拟机将会为新生对象分配内存 对象所需的内存在类加载后就可以完全确定; 阅读全文
posted @ 2021-03-09 15:16 keepkeep 阅读(35) 评论(0) 推荐(0) 编辑