摘要:https://www.cnblogs.com/hongdada/p/16994326.html JAVA并发-Thread.sleep(0)深入理解 https://www.cnblogs.com/thisiswhy/p/16657667.html 没有二十年功力,写不出Thread.sleep(
阅读全文
摘要:背景: 直接传递,参数过多,所以不直接传递 成员变量,资源的释放成为问题,造成内存泄漏 解决: //private List resource; private WeakReference<List> resourc; func() { //resource = xxx; List tempList
阅读全文
摘要:1 ArrayBlockingQueue 循环数组 ringbuffer 一把锁 3个属性伪共享 cpu缓存友好 2 LinkedBlockingQueue 无法避免在队列中只有一个元素时的线程安全问题。 为解决上述问题,LinkedBlockingQueue的head节点始终指向一个空节点(在构造
阅读全文
摘要:List1 = make list {new D, new D, ..., new D } func(list1) { List2 = make list {new V(list1.get(0)), new V(list2.get(1)), ...) mapper(list2) } 改进: arra
阅读全文
摘要:1 jvm intern c++那边是一个HashTable,需要考虑一些容量问题 2 jdk weakkeyconcurrenthashmap clean参照了ThreadlocalMap,同时配合HashWeakReference的equals和hashCode clean的时机不知道合适 cl
阅读全文
摘要:1 此前用的分段锁,虽然现在变单线程环境了,但是桶仍然可以继续分 用一个桶到中程性能极具下降 分桶后10个数据块耗时分布均匀 可以按实际情况一直分下去,比如100,200 2 一段时间后20个桶都不够了,忘记改了啥了 改成200试下,结果并没啥用,但特点是卡在同一个10万数据块,意味着性能下降是非线
阅读全文
摘要:1 全局锁,240小时 分段锁8个桶,15小时 单线程1个桶,中程long running 单线程 20个桶7小时 2 能不能乐观锁?这个场景其实应该用乐观锁。IdentityHashMap的可见性没法解决 3 不锁,容忍误差? 与2其实本质相同,乐观锁其实锁了个寂寞
阅读全文
摘要:循环日志 由这篇日志引出的奇怪的问题 原文的目的是尽早回收ThreadMap里的非活跃对象,不要搞的map太大 手段是从外部将所有 各种对象所引用的Threadlocal强制set为null,那么要强刷掉这些对象所在线程的缓存,则threadlocal对象也应该如内存泄漏事故(二)线程的中断不可信任
阅读全文
摘要:0 不允许在循环内打日志 1 主要策略:限制某个循环体内打日志的次数 主要困难:调用链太长,传递循环当前次数要改很多方法,类似于事务的connction,这种不方便传递参数的东西就想到了threadlocal 2 不想永久某线程到100就一直不让打了,想第二天的job清0 同时也不想用timer——
阅读全文
摘要:为什么用成员变量?要多态 成员变量会有什么问题?如果对象本身用完被保存起来了,则这些资源泄漏了 能不能在最外边用finally,置为null?可以,但是就是不想用fianlly func() { try { this.resourceReference = new xxx; ...... } fin
阅读全文
摘要:void func(Integer i1, Integer i2) Integer ii1 = new Integer(10001) ii1 在栈,指向堆里面的 new Integer,假设new Integer地址为xxxx1 Integer ii2 = new Integer(10002) 假设
阅读全文
摘要:1 原理 object -> Double map -> Double 两条都是强引用,当object释放时,Double仍然不能释放 应当把map那条改为弱引用 2 实践 一次内存优化
阅读全文
摘要:1 Map<k, list> not good: map.remove(k) 如果这时有其他指针指向list,则list无法释放 good: map.get(k).clear() map.remove(k) 即使这是有其他指针指向list,导致list无法释放,但是这个list是空的,泄漏的后果不严
阅读全文
摘要:Tool { Wrapper wrapper; void write() { Future s= this.new Consumer() {wrapper.getList();} futures.get() } Consumer extends Thread } Wrapper { List lis
阅读全文
摘要:重新回用IdentityHashmap,jdk没有并发版本,需要自己锁 借鉴ConcurrentHashmap 1.7的做法 , 加分段锁 以idendityhashcode为锚点
阅读全文
摘要:java object多大 java对象内存模型 数组有多长(九)多线程2 中并没有什么好的办法,也make sense,毕竟压缩了数据 所以还是试图从数据特征入手 需要计算的大对象 80%的都是Double,所以剔除掉Double的逻辑判断 首先,重要结论,java object多大 java对象
阅读全文
摘要:1 String list class private String x = "xx"; 直接指到既有对象,编译器不会new String 2 Integer list class private Integer = 127 127 intern 128 no intern,编译器Integer.v
阅读全文
摘要:背景: 多线程与单线程byte模式有误差,而且多线程每次跑出来不一样 发现: 1多线程的代码一个线程一个执行是好的,证明Lists没问题 2set多线程单线程没有误差,意味着除了byte那一块代码,其他的代码是可被信任的 3单线程5000以下没有hash冲突时:byte==set==apache==
阅读全文
摘要:0 背景 在 java object多大 java对象内存模型 数组有多长(四)已经访问的对象记录优化 中,用byte数组处理,现在它将暴露在多线程中 借鉴concurrenthashmap的做法 Unsafe控制ConcurrentHashMap内并发数组元素的可见性 1双检分段锁 get if
阅读全文
摘要:https://blog.51cto.com/u_15082395/2590044 深度解析默认 hashCode() 的工作机制 biased object是偏向锁定的结果。这个功能获得了专利,自HotSpot 6开始引入,用来降低对象锁定带来的开销。由于具体实现依赖CPU原子指令(CAS),因此
阅读全文