- 博客(14)
- 收藏
- 关注
原创 Java并发编程的艺术-读书笔记
实现原理是:操作系统层面的缓存一致性协议(锁总线或锁缓存行两种方式),CPU的高速缓存行(工作内存)变更时,会确保独占更新内存数据,同时在总线上发布lock信号通知别的处理器将对应这个内容的缓存行置为失效。锁对象时MonitorEnter,释放锁对象是MonitorExist,任何对象都可以是锁,锁依赖的是对象头上的MarkWord区域的信息(包含分代信息、hashcode、锁等级等)1、底层,使用锁总线或锁缓存保证原子性,锁总线影响大,锁缓存影响小。3、使用锁机制实现原子操作。
2025-03-04 14:45:00
242
原创 使用koupleless实现模块化开发与多模块静态合并部署
koupleless是蚂蚁开源的基于sofa-ark的模块化研发框架GitHub - koupleless/koupleless: 模块化研发框架,运维调度系统,帮助应用解决研发运维系列痛点问题,省资源、秒级启动、灵活部署、快速需求交付等,并帮助存量应用低成本演进到 Serverless 模式;问题表象:在模块中rpc泛化调用时登录人信息没有传递下去,使用ServiceConfig动态暴漏rpc服务时也有这个问题。
2025-02-18 15:57:49
1152
原创 XXL系列框架
很早之前接触过xxl系列的一些框架,其实除了xxl-job比较常用外,别的框架不是特别热门,但是这一系列框架优点是简单易学习特别适合新人体验源码阅读的乐趣。以下就是我对这些框架的学习分析。
2025-01-26 16:50:31
857
原创 JDK各版本特性
由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化,在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为"Stop the world"。ZGC优化:增强 ZGC 释放未使用内存,将标记长时间空闲的堆内存空间返还给操作系统,保证堆大小不会小于配置的最小堆内存大小,如果堆最大和最小内存大小设置一样,则不会释放内存还给操作系统。G1收集器的优化,将GC的垃圾分为强制部分和可选部分,强制部分会被回收,可选部分可能不会被回收,提高GC的效率。
2025-01-24 14:49:30
382
原创 Dubbo调用如何实现异步转同步
dubbo调用有三种方式oneway、async、sync,dubbo3中triple还增加了类似grpc的双向流的响应式编程方式,这篇主要说明平时最常用的sync方式下,基于netty实现的dubbo协议中是如何把netty的异步请求响应转成同步调用的效果。
2024-09-29 11:46:52
796
原创 饥饿的线程池
但是这样改写queue会导致一个副作用就是在offer内return false后,addWorker(command, false)时此时线程数达到了Max,那么线程池就会拒绝这个任务,所以还需要。这种线程池可以提高处理速度和效率,特别适合用在非CPU密集型的处理场景下延迟更低响应更快,提高吞吐量,而且空闲时还不占用max线程。这种线程池可以比喻成饥饿的线程池,因为不管提交多少任务,都是尽其所能的先分配线程执行,尽快消费。线程池运行的基本逻辑是C->Q->M,有没有办法把执行逻辑改成C->M->Q呢?
2024-09-08 22:17:29
369
原创 Java连接SQLServer报服务端仅支持TLS10
通过查阅网上资料大部分说原因是Java认为TLSv1不太安全所以在java.security中通过jdk.tls.disabledAlgorithms配置禁用了TLSv1, TLSv1.1,导致Java应用作为SQLServer客户端连接服务时使用的TLS13, TLS12协议,但是SQLServer服务端可能版本比较老或者配置了仅支持TLS10导致报上述错误。修改基础镜像中的/usr/java/latest/jre/lib/security/java.security文件内容,替换成之前的内容。
2024-08-14 18:25:23
900
原创 ES查询报错ContentTooLongException排查过程
(因为这里使用es的方式不是直接使用spring原生方式,而是自己包装了一层,根本原因可能还是自己的包装的实现里面有一些不合适的地方,用search去做searchAggregationsCount,search内就会走上兜底size为10000的逻辑,当然直接使用开源的spring方式集成可能也会有类似的问题)到这里问题其实比较清晰了,经过对比我手动请求es的命令里面没有带size,而程序请求es的报文里面带了size,导致将文档内容在hits中响应了回来,导致响应超大。
2024-07-17 17:48:00
671
原创 应用定时主动触发FGC问题排查
2、还是看不到具体来源,基于10小时这个数字太特殊直接在网上搜索看到是cxf-core三方依赖会主动触发,查看服务确实引用cxf依赖,可以通过参数org.apache.cxf.JDKBugHacks.gcRequestLatency=true关闭固定Full GC的逻辑。发现服务启动后会立刻主动触发一次,就服务重启时立马开始监听System.gc方法的调用堆栈,发现调用来源是sun.misc.GC$Daemon.run(GC.java:109)
2024-07-03 10:52:21
476
原创 ThreadPoolExecutor
可以把线程池理解成一个黑心工厂,工厂老板只顾了5个核心常驻员工,当工作任务不多时让这5个员工来处理,处理不过来的任务就先堆放到仓库里面等后面有人力了慢慢处理,如果仓库也堆满了,就雇一些临时员工来帮忙处理,等任务处理完了,仓库也没有积压了就干掉临时员工,核心worker加上临时worker一共不会超过max。2、当allowCoreThreadTimeOut为false时,在ThreadPoolExecutor#getTask()中会判断线程数量大于code时才会return null去销毁线程。
2024-07-02 15:27:08
381
原创 使用ApacheHttClient时偶现异常ConnectionPoolTimeoutException
当使用HttpClientBuilder创建自定义的HttpClient的时候没有主动setConnectionManager导致org.apache.http.impl.client.HttpClientBuilder#build内兜底使用默认逻辑创建connectionManager的defaultMaxPerRoute只有2,maxTotal也只有20。当请求量稍一大且响应慢时连接池就会不够用,进而报错ConnectionPoolTimeoutException。
2024-07-01 21:05:40
261
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人