随笔分类 -  jvm

1 2 3 下一页

sleep(0)for int/long
摘要:https://www.cnblogs.com/hongdada/p/16994326.html JAVA并发-Thread.sleep(0)深入理解 https://www.cnblogs.com/thisiswhy/p/16657667.html 没有二十年功力,写不出Thread.sleep( 阅读全文

posted @ 2025-07-27 14:39 silyvin 阅读(14) 评论(0) 推荐(0)

一种在类中传递资源的方式
摘要:背景: 直接传递,参数过多,所以不直接传递 成员变量,资源的释放成为问题,造成内存泄漏 解决: //private List resource; private WeakReference<List> resourc; func() { //resource = xxx; List tempList 阅读全文

posted @ 2025-07-08 19:20 silyvin 阅读(23) 评论(0) 推荐(0)

再谈ArrayBlockingQueue/LinkedBlockingQueue和Disruptor
摘要:1 ArrayBlockingQueue 循环数组 ringbuffer 一把锁 3个属性伪共享 cpu缓存友好 2 LinkedBlockingQueue 无法避免在队列中只有一个元素时的线程安全问题。 为解决上述问题,LinkedBlockingQueue的head节点始终指向一个空节点(在构造 阅读全文

posted @ 2025-06-21 23:57 silyvin 阅读(49) 评论(0) 推荐(0)

一次省运行内存的实践
摘要: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 阅读全文

posted @ 2025-05-16 11:53 silyvin 阅读(26) 评论(0) 推荐(0)

intern(四)实现怎么样防止内存泄漏
摘要:1 jvm intern c++那边是一个HashTable,需要考虑一些容量问题 2 jdk weakkeyconcurrenthashmap clean参照了ThreadlocalMap,同时配合HashWeakReference的equals和hashCode clean的时机不知道合适 cl 阅读全文

posted @ 2025-04-30 00:57 silyvin 阅读(18) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(十四)内存安全 & 完结
摘要:1 此前用的分段锁,虽然现在变单线程环境了,但是桶仍然可以继续分 用一个桶到中程性能极具下降 分桶后10个数据块耗时分布均匀 可以按实际情况一直分下去,比如100,200 2 一段时间后20个桶都不够了,忘记改了啥了 改成200试下,结果并没啥用,但特点是卡在同一个10万数据块,意味着性能下降是非线 阅读全文

posted @ 2024-12-20 15:45 silyvin 阅读(17) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(十二)放弃锁
摘要:1 全局锁,240小时 分段锁8个桶,15小时 单线程1个桶,中程long running 单线程 20个桶7小时 2 能不能乐观锁?这个场景其实应该用乐观锁。IdentityHashMap的可见性没法解决 3 不锁,容忍误差? 与2其实本质相同,乐观锁其实锁了个寂寞 阅读全文

posted @ 2024-12-09 22:32 silyvin 阅读(8) 评论(0) 推荐(0)

threadlocal变量要不要volatile
摘要:循环日志 由这篇日志引出的奇怪的问题 原文的目的是尽早回收ThreadMap里的非活跃对象,不要搞的map太大 手段是从外部将所有 各种对象所引用的Threadlocal强制set为null,那么要强刷掉这些对象所在线程的缓存,则threadlocal对象也应该如内存泄漏事故(二)线程的中断不可信任 阅读全文

posted @ 2024-12-02 23:14 silyvin 阅读(14) 评论(0) 推荐(0)

循环日志
摘要:0 不允许在循环内打日志 1 主要策略:限制某个循环体内打日志的次数 主要困难:调用链太长,传递循环当前次数要改很多方法,类似于事务的connction,这种不方便传递参数的东西就想到了threadlocal 2 不想永久某线程到100就一直不让打了,想第二天的job清0 同时也不想用timer—— 阅读全文

posted @ 2024-11-01 21:31 silyvin 阅读(24) 评论(0) 推荐(0)

成员变量 局部变量 内存泄漏(很怪异的)
摘要:为什么用成员变量?要多态 成员变量会有什么问题?如果对象本身用完被保存起来了,则这些资源泄漏了 能不能在最外边用finally,置为null?可以,但是就是不想用fianlly func() { try { this.resourceReference = new xxx; ...... } fin 阅读全文

posted @ 2024-10-09 01:07 silyvin 阅读(15) 评论(0) 推荐(0)

交换Integer方法
摘要:void func(Integer i1, Integer i2) Integer ii1 = new Integer(10001) ii1 在栈,指向堆里面的 new Integer,假设new Integer地址为xxxx1 Integer ii2 = new Integer(10002) 假设 阅读全文

posted @ 2024-09-15 23:39 silyvin 阅读(13) 评论(0) 推荐(0)

intern(三)自定义intern的内存泄漏
摘要:1 原理 object -> Double map -> Double 两条都是强引用,当object释放时,Double仍然不能释放 应当把map那条改为弱引用 2 实践 一次内存优化 阅读全文

posted @ 2024-08-30 00:19 silyvin 阅读(22) 评论(0) 推荐(0)

内存泄漏事故(二)线程的中断不可信任【重要】配合volatile强制回收子线程成员变量
摘要:1 Map<k, list> not good: map.remove(k) 如果这时有其他指针指向list,则list无法释放 good: map.get(k).clear() map.remove(k) 即使这是有其他指针指向list,导致list无法释放,但是这个list是空的,泄漏的后果不严 阅读全文

posted @ 2024-08-02 00:24 silyvin 阅读(31) 评论(0) 推荐(0)

内存泄漏事故
摘要:Tool { Wrapper wrapper; void write() { Future s= this.new Consumer() {wrapper.getList();} futures.get() } Consumer extends Thread } Wrapper { List lis 阅读全文

posted @ 2024-08-01 21:46 silyvin 阅读(21) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(十一)分段锁
摘要:重新回用IdentityHashmap,jdk没有并发版本,需要自己锁 借鉴ConcurrentHashmap 1.7的做法 , 加分段锁 以idendityhashcode为锚点 阅读全文

posted @ 2024-07-10 09:38 silyvin 阅读(17) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(十)放弃解决hash冲突
摘要:java object多大 java对象内存模型 数组有多长(九)多线程2 中并没有什么好的办法,也make sense,毕竟压缩了数据 所以还是试图从数据特征入手 需要计算的大对象 80%的都是Double,所以剔除掉Double的逻辑判断 首先,重要结论,java object多大 java对象 阅读全文

posted @ 2024-06-25 15:47 silyvin 阅读(14) 评论(0) 推荐(0)

intern(二)什么东西会被intern Double会吗
摘要:1 String list class private String x = "xx"; 直接指到既有对象,编译器不会new String 2 Integer list class private Integer = 127 127 intern 128 no intern,编译器Integer.v 阅读全文

posted @ 2024-06-25 15:12 silyvin 阅读(11) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(九)多线程2-发现问题
摘要:背景: 多线程与单线程byte模式有误差,而且多线程每次跑出来不一样 发现: 1多线程的代码一个线程一个执行是好的,证明Lists没问题 2set多线程单线程没有误差,意味着除了byte那一块代码,其他的代码是可被信任的 3单线程5000以下没有hash冲突时:byte==set==apache== 阅读全文

posted @ 2024-06-21 23:38 silyvin 阅读(17) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(八)多线程cas
摘要:0 背景 在 java object多大 java对象内存模型 数组有多长(四)已经访问的对象记录优化 中,用byte数组处理,现在它将暴露在多线程中 借鉴concurrenthashmap的做法 Unsafe控制ConcurrentHashMap内并发数组元素的可见性 1双检分段锁 get if 阅读全文

posted @ 2024-06-19 15:13 silyvin 阅读(12) 评论(0) 推荐(0)

java object多大 java对象内存模型 数组有多长(七)偏向锁
摘要:https://blog.51cto.com/u_15082395/2590044 深度解析默认 hashCode() 的工作机制 biased object是偏向锁定的结果。这个功能获得了专利,自HotSpot 6开始引入,用来降低对象锁定带来的开销。由于具体实现依赖CPU原子指令(CAS),因此 阅读全文

posted @ 2024-06-18 16:55 silyvin 阅读(23) 评论(0) 推荐(0)

1 2 3 下一页