我有一个高吞吐量低延迟应用程序(3000个请求/秒,每个请求100毫秒),我们大量使用Java 8 ConcurrentHashMap
来执行查找。通常这些映射由单个后台线程更新,并且从这些映射中读取多个线程。
我看到了性能瓶颈,在进行性能分析时,我发现ConcurrentHashMap.get
是热点并占据了大部分时间。
在另一个案例中,我看到ConcurrentHashMap.computeIfAbsent
是热点,虽然映射函数的延迟非常小,但是配置文件显示computeIfAbsent
占用90%的时间执行自身,而且时间非常短执行映射功能。
我的问题是,我有什么方法可以改善表现?我有大约80个线程同时从CHM读取。
答案 0 :(得分:2)
我有大约80个线程同时从CHM读取。
最简单的事情是
如果你有任何延迟,你可以在低延迟系统中看到,你有问题恕我直言。