摘要: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),因此
阅读全文
摘要:https://cloud.tencent.com/developer/article/1622192 java默认的hashcode方法到底得到的是什么? 在hashCode方法注释中,说hashCode一般是通过对象内存地址映射过来的。 As much as is reasonably prac
阅读全文
摘要:1 https://stackoverflow.com/questions/7207302/if-javas-garbage-collector-moves-objects-what-is-object-hashcode-and-system-id I've often heard that the
阅读全文
摘要:800*0.8*8*1400w = 66.76GB 光存那些Double指针花了那么多 优化方案: 1 Double(Long Integer)类型除了0,默认未访问,允许重复计算 String类型length超过50默认未访问,允许重复计算 2 借鉴 ip白名单算法(pdd活跃用户) 存对象地址h
阅读全文
摘要:time before GC(MB) after GC(MB) 19:23:23 2807442 2663288 19:24:04 2696290 2575996 old GC 19:31:06 3233018 2553234 19:35:02 3189076 2605652 19:37:34 30
阅读全文
摘要:在之前的程序中,考虑到hotspot java11 Unsafe包的不可达(最近发现zing 11能访问),搞出来手动定义的 但并没有意义,手动定义通常基于hotspot,并不能适用用于其它jvm,unsafe里的偏移或reference信息本身就是jvm具体实现的,手动定义相当于脱离了真实线上环境
阅读全文