neo 的小窝
欢迎来到 neo 的小窝,更多参见我的 GitHub账号 http://github.com/neocxf
摘要: [TOC] 一个典型的 double check 的单例实现 阅读全文
posted @ 2020-05-12 21:04 neo的小窝 阅读(130) 评论(0) 推荐(0) 编辑
摘要: Java 中的各种锁 [TOC] 锁的类型 乐观锁 适用于读多写少的情景,通过类似于版本号的形式,先读入版本号 value(即旧的值),进行计算得出新的版本号 new,待更新的时候,重新取一个旧的版本号 expected(重新从内存中取出这个数据),如果 value == expected,则证明在 阅读全文
posted @ 2020-04-03 15:39 neo的小窝 阅读(229) 评论(0) 推荐(0) 编辑
摘要: Java 对象布局及其组成 [TOC] 在 hotspot 虚拟机中,对象在内存中布局可以被分为三部分:对象头/实例数据/补位数据。下面一张图是一个普通 java 对象和一个数组对象的结构组成: Java 对象组成 Hotspt 采用了 OOP Klass 模型。 它是描述 java 对象实例的模型 阅读全文
posted @ 2020-03-30 17:58 neo的小窝 阅读(2453) 评论(0) 推荐(1) 编辑
摘要: [TOC] What is Monitor? I am a test | hi | I | am | | | | | | 1 | 2 | 3 | | 4 | 5 | 6 | | 7 | 8 | 9 | Monitor Java Object header 指针压缩 引用: 1. "Thread sy 阅读全文
posted @ 2020-03-27 17:36 neo的小窝 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 首先贴 java 8 中实现的源代码 1 /** Implementation for put and putIfAbsent */ 2 final V putVal(K key, V value, boolean onlyIfAbsent) { 3 if (key == null || value 阅读全文
posted @ 2020-03-27 13:58 neo的小窝 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 为了实现一个通过 Hash 寻址的方式,获得存储的元素,首先要考虑的选择何种 Hash 算法。 HashMap 选择了近似于取模的方式,获得元素存储的位置。当然为了提高性能,且降低key 的碰撞。HashMap主要做了两方面的优化 1. 对Hash取值的优化 我们当然可以直接选择存储的 key 的 阅读全文
posted @ 2020-03-25 16:27 neo的小窝 阅读(1609) 评论(0) 推荐(0) 编辑
摘要: 目标:假定我们要定义一个类似于HashMap的数组结构,该数据结构要确保即使在高并发多次初始化的背景下,具体存储的数组的初始化仍然是正确的。我们对这个结构可以简化一些,先考虑其元素的存储 实现1:实现一个线程不安全的容器 class TableHolder { static final int DE 阅读全文
posted @ 2020-03-24 13:59 neo的小窝 阅读(1097) 评论(0) 推荐(0) 编辑
摘要: ConcurrentHashMap 中为了提高并发时锁的效率,对底层做了很多优化,其中一点就是对存储数据的数组的操作的优化,在Java 8中使用了 CAS 对要操作的数组进行操作 Unsafe 的获取 Field f = Unsafe.class.getDeclaredField("theUnsaf 阅读全文
posted @ 2020-03-23 10:40 neo的小窝 阅读(752) 评论(0) 推荐(0) 编辑