![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA语言
文章平均质量分 81
860MHz
这个作者很懒,什么都没留下…
展开
-
Runtime.getRuntime().availableProcessors()方法在Docker容器中遇到的问题和解决方案
问题最近在线上环境遇到一个奇怪的问题,仅仅20qps的压测,产生非常多的毛刺,立刻判断出毛刺是由于YGC导致。线上环境为docker容器,4核8G内存,openjdk8u排查过程于是登录线上机器查看GC日志,发现GC Workers: 63,但压测服务器仅4核,不可能有63个GC线程。[GC pause (G1 Evacuation Pause) (young), 0.0054131 secs] 10 [Parallel Time: 3.6 ms, GC Workers: 63] 11原创 2021-03-05 00:33:50 · 6110 阅读 · 1 评论 -
Lambda表达式实现机制的分析
1. 背景几年前曾经写过一篇Lambda表达式实现机制的分析,现在回头看错误很多,有误导嫌疑,因此重写一版订正。2. Lambda表达式的字节码分析下面代码为一个Lambda表达式的例子package demo;import java.util.LinkedList;import java.util.List;import java.util.stream.Collectors;public class Test1 { public void func1(List<Inte原创 2020-10-04 23:58:15 · 385 阅读 · 0 评论 -
java.nio.file.Files lines方法使用不当引发的文件句柄泄露
1. 问题描述4月29日上午,测试同学通过压测工具测试"网关->业务层->分析服务"链路,QPS 200。测试开始不久后,CloudMonitor告警"分析服务"服务器磁盘占用超过80%,经过排查,确定告警根原因是java.nio.file.Files lines方法使用不当引发的文件句柄泄露,临时文件被删除后磁盘空间未释放导致。2. 排查步骤测试开始后10分钟左右,Clo...原创 2020-04-29 19:12:40 · 1189 阅读 · 0 评论 -
Java 12 新特性之JEP 325: Switch Expressions (Preview)
1. 背景Java中switch的语法长期被人诟病,尤其在scala中强大的case关键字对于类型匹配、顺序匹配、对象深度匹配、正则匹配、函数式的支持衬托下,更显得相形见拙。因此对于switch的改造在很早的时候就提上日程了,终于到了Java 12中,switch的新表达式作为preview feature交付了。2. 功能描述作为preview feature,默认情况下是无法编译的,需...原创 2019-03-22 15:18:53 · 1184 阅读 · 3 评论 -
Kotlin字节码解析-2 Lambda表达式
1. 背景JAVA中的Lambda表达式是JAVA 8中引入的,字节码层级是通过invokedynamic指令执行的,JVM在运行时动态创建类,并通过方法句柄调用的。而Kotlin同时支持JAVA 1.6和Lambda表达式,由于invokedynamic指令是JAVA 7引入的,显然不可能和JAVA中Lambda表达式采用相同的实现机制。本文是通过反编译协程相关class文件,分析Kotl...原创 2019-05-27 18:48:11 · 450 阅读 · 0 评论 -
Ehcache的缓存淘汰机制
1. 简介正如上篇文章所说,Ehcache采用了多级缓存堆内、堆外、磁盘,每级缓存容量递增,最底层被称为Authoritative Tier,其余的缓存层被称为Caching Tier。Authoritative Tier层数据是最全的,其余层的数据都是该层的数据子集,只是临时存储数据。当Caching Tier容量不足时,Ehcache将触发淘汰机制,本文将详细介绍淘汰机制的原理。2. 代...原创 2019-07-16 18:56:06 · 2156 阅读 · 0 评论 -
OpenJDK ZGC 源码分析(二)触发GC的时机
1. 简介ZGC的回收周期触发时机与其他GC算法略有不同,VM内部有个线程轮询定期检查是否满足开始回收的条件,如果满足则开始回收。ZGC提供四种策略,其中一种满足条件即触发回收:rule_timer,定时策略,距离上次GC时间超过interval即触发GCrule_warmup,VM启动后,如果从来没有发生过GC,则在堆内存使用超过10%、20%、30%时,分别触发一次GC,以收集GC数...原创 2019-08-08 12:22:10 · 1043 阅读 · 0 评论