zoukankan      html  css  js  c++  java
  • getBean(class )并发下性能较差,有锁.

     spring 版本3.1.2

    1. spring 并没有缓存 class -> beanDifinition 或者 sington 实例的缓存.

    2. 只能先获取所有的beanDifitions [ 含 sington 和 prototype ] + 所有manually registered的 bean

    3. getBeanDefinitionNames 这里有锁,性能较差.

      原因, 线程阻塞,线程池耗尽, 外部请求耗时都比较少,但是最终返回耗时都比较高.

       这种极有可能 1. 某些 io 调用耗时增加(未监控) 2. 线程池满等待 3. tcp 复用等待 4.swap 耗时等待 5.gc 耗时

       查看 jstack pid, 发现很多阻塞在 getBean 上,

    public String[] getBeanDefinitionNames() {
    		synchronized (this.beanDefinitionMap) {
    			if (this.frozenBeanDefinitionNames != null) {
    				return this.frozenBeanDefinitionNames;
    			}
    			else {
    				return StringUtils.toStringArray(this.beanDefinitionNames);
    			}
    		}
    	}
    

  • 相关阅读:
    MyBatis-Plus使用(4)-集成SpringBoot
    MyBatis-Plus使用(3)-条件构造器
    Logback日志格式优化,解决输出***@2b193f2d问题
    MyBatis-Plus使用(2)-CRUD接口
    数组
    switch结构
    if的使用
    new函数
    指针
    常量和iota
  • 原文地址:https://www.cnblogs.com/fei33423/p/7887002.html
Copyright © 2011-2022 走看看