为什么使用最近最少使用的简单缓存机制?

Adr*_*ian 6 java spring profiling jprofiler spring-boot

我使用JProfiler检查Java微服务,同时用JMeter模拟并发用户.使用JProfiler,我可以看到: 概观 线程历史 监控用法 监控历史 导航到方法find(),我意识到该方法有synchronized关键字 方法

在我看来,这种方法导致线程被阻塞的问题.但为什么要使用它?我可以从微服务中禁用这个缓存机制吗?微服务是用Java编写的,它使用Spring,Spring Boot.

谢谢

我从Monitor History的相同JProfiler快照中添加了屏幕截图,以显示ResolvedTypeCache类所花费的时间.有时候时间较少但有时却很大. 历史监视器更新

Eug*_*ene 1

你的结论对我来说似乎非常错误,特别是当你暗示这要么不好,要么存在潜在的僵局时。

该类中存在synchronized方法这一事实并不表示存在死锁。事实上,有多个线程等待单个锁——这synchronized毕竟是事实。还要看看那些时间,那些看起来像微秒,线程最多停留在 4000 个左右4ms——没有那么多。

由于这是一个内部库,因此您无能为力,可能会建议他们实现一个ConcurrentHashMap可以提高性能的库,或者更好地自己制作补丁。

  • @Adrian当然这是一个选择,但这会给你带来任何好处吗?重构/可能面临一些其他潜在问题......这并不像听起来那么简单。正确的做法是获取原始源代码,创建补丁,在本地进行测试,向库的原始提供者提交补丁...这就是我们在遇到这些问题时有时会做的事情,您依赖于开放-源码软件,不妨偶尔回馈一下 (2认同)