java
talen_hx296
80后老码农,在技术的海洋里,慢慢进行.
主要在JAVA和golang,大数据和云原生领域深耕,架构方面工作
16年一线研发经验,3年架构经验,曾任职世界百强企业IBM资深工程师
展开
-
Log4j 安全漏洞已得到解决
最佳方式是替换jar包,现在2.15.0已经发布,在maven公共仓库已经可以下载第二种是修改启动参数, -Dlog4j2.formatMsgNoLookups=true个人推荐第一种方式,不要下载2.15.0-rc2这种了原创 2021-12-11 11:44:54 · 813 阅读 · 0 评论 -
ArrayBlockingQueue加锁思考
public ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c) { this(capacity, fair); final ReentrantLock lock = this.lock; //这里加锁的作用 lock.lock(); // Lock only for vis.原创 2021-09-23 11:11:40 · 240 阅读 · 0 评论 -
JAVA对象分配
1.判断是否可以分配到栈上,首先进行逃逸分析,判断对象是否只是在方法内使用,标量替换,不会创建该对象,而是将对象里面的成员变量打散,然后变量在栈帧上或寄存器上分配空间2.PretenureSizeThreshold设置大对象大小,jvm由这个参数来判断对象是否为大对象,默认为0,则不管对象多大,都分配到eden区3.如果不能分配到栈上,则判断TLAB(线程本地分配缓存区,这是一个线程专用的内存分配区域)是否可以存放,这块内存是在eden区内,开一块内存存放,缺省情况下仅占有整个Eden空间的1%,可原创 2021-09-22 15:04:05 · 171 阅读 · 0 评论 -
ScheduledThreadPoolExecutor源码
普通的线程池执行流程,应该很多人都知道了,可是定时任务线程更为重要,很多框架都用到了,应用场景有很多,比如心跳,拉取信息,redisson锁的续约,同步数据等public ScheduledThreadPoolExecutor(int corePoolSize) { super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue());}//shutdown后是.原创 2021-09-07 10:50:06 · 102 阅读 · 0 评论 -
java内存管理
一、JVM管理内存,主要是两大类,线程共享和线程独享1.线程共享:堆、方法区2.线程独享:虚拟机栈,本地方法栈、程序计数器虚拟机栈包含栈帧,栈帧包含局部变量表、操作数栈、动态链接、方法出口方法区(永久代):类信息、常量、 静态变量、即时编译器编译后的代码等数据,运行时常量池新生代分eden区和servivor区,servivor区又划分了to和from区servivor区是存放minorgc的幸存对象eden区是存放新生对象,如果对象不够放,就直接放到老年代老年代触发majo原创 2021-08-25 15:34:38 · 157 阅读 · 0 评论 -
xxl-job源码任务调度流程
1、外面有两个守护线程,分别是scheduleThread和ringThread 2、JobTriggerPoolHelper里面分了fastTriggerPool和slowTriggerPool,这两个主要不同是最大线程数是独立配置的,还有阻塞队列的数量不一样,前者是1000,后者是2000 3、任务会在这两个线程里,动态的切换,用不同的线程池,根据任务ID,从jobTimeoutCountMap取超时数量,如果大于10就选择slowTriggerPool,如果超过500ms,则加1 4、有线程池,原创 2021-08-19 10:17:56 · 388 阅读 · 1 评论 -
xxl-job源码之任务调用流程
原创 2021-08-16 10:01:44 · 558 阅读 · 0 评论 -
java并发知识梳理
原创 2021-08-11 10:39:53 · 87 阅读 · 0 评论