java基础
SineyCoder
以算法和JAVA为主
展开
-
模拟ThreadLocal内存泄漏过程
我们知道,在java的ThraedLocal中可能存在内存泄漏的问题。原因在于其内部维护了一个弱引用Map,其对于key是一个弱引用,当我们线程的强引用不再指向其对象时,就会进行回收。但是map中只回收了key而没有回收value,这务必造成内存的泄漏。因此,这里通过模拟这一过程,更加好的理解ThreadLocal内存泄漏。import java.lang.ref.ReferenceQueue;import java.lang.ref.WeakReference;import java..原创 2020-09-14 07:43:41 · 422 阅读 · 0 评论 -
记录一致性hash的java实现
一致性hash通常用在客户端的负载均衡策略,目的就是在变更服务器数量时,能尽量保证命中率。这样就不会造成缓存雪崩的问题。下列代码就是通过模拟正常hash和一致性hash的比对进行。对于正常的hash而言,当我们存入K,V键值对时,我们只需要hash(K) % size,然后把结果映射到对应服务器即可。这种方式对于服务器负载均衡而言是很好的,经过测试每台服务器的压力都会平均。但是在扩展服务器后,可能就会出现问题,造成大量K不命中,从而重新往数据库查数据,增加了数据库压力。对于一致性hash,需要有足够.原创 2020-06-20 10:50:15 · 196 阅读 · 0 评论 -
模拟synchronized锁升级过程(详细代码)
synchronized在1.6之后发生了很大改动,做了很多优化。因为Doug Lea大师的ReentrantLock类设计的很完美,jdk源码作者不服,所以对synchronized做了很大的改动。此博客针对已对synchronized锁有所了解的。首先我们需要知道synchronized具有4种锁的状态(细分5种):无锁无偏向 无锁可偏向 有锁已偏向 轻量锁 重量锁...原创 2020-04-19 15:18:31 · 910 阅读 · 0 评论