性能有坑 | 慎用 Java 8 ConcurrentHashMap 的 computeIfAbsent

前言

我们先看一段代码,代码中使用 Map 的时候,有可能会这么写:

Java 8 的 java.util.Map 里面有个方法 computeIfAbsent,能够简化以上代码:

以上这种写法除了简洁,如果使用的是 java.util.concurrent.ConcurrentHashMap,还能够在并发调用的情况下确保 calculateValue 方法不会被重复调用,保证原子性。

不过,前段时间对 Apache ShardingSphere-Proxy 做压测时遇到一个问题,当 BenchmarkSQL 连接 ShardingSphere Proxy 的 Terminal 数量比较高时,其中一条很简单的插入 SQL 执行延迟增加了很多。借助 Async Profiler 发现 Java 8 ConcurrentHashMap 的 computeIfAbsent 在性能上有坑。

不了解 Apache ShardingSphere 的读者可以参考 https://github.com/apache/shardingsphere

继续阅读性能有坑 | 慎用 Java 8 ConcurrentHashMap 的 computeIfAbsent

解决Windows 10备份和还原遇到的0x80070544问题

随着主力计算机设备年限越来越近,对数据保护的重视度也越来越高,尤其之前遭遇过数据损失。目前采用的备份方案是使用文件历史记录功能对 OneDrive 等经常会访问和编辑的目录进行备份。对于其他归档用途的目录则使用备份和还原功能,定期执行一次备份。而备份的位置建议是额外的磁盘或 NAS 提供的 iSCSI,gOxiA 为了图方便和节省 NAS 空间,则使用的是共享文件夹的方式。在实际配置过程中如果使用共享文件夹这样的网络位置,则可能会遇到 0x80070544 故障问题,提示为“请求的验证信息类无效”。

继续阅读解决Windows 10备份和还原遇到的0x80070544问题