开发者社区> 问答> 正文

Spring高并发下Cglib代理性能问题

这两天做压力测试(服务器是IBM P750 8C 32G),高并发下如果用反射直接调用一个简单的服务(空方法,直接return)TPS大概能到将近300,如果用Spring的applicationContext getBean来获取服务对象调用的话(服务bean是prototype类型),TPS只有不到90。

在日志里记录了一下执行时间,用反射调用服务执行时间基本在10毫秒以内,但是用Spring的ApplicationContext执行时间在1秒左右。

这样的问题是不是cglib代理引起的?有什么解决办法?

展开
收起
a123456678 2016-03-17 10:54:12 4259 0
4 条回答
写回答
取消 提交回答
  • 推荐回答:

    Spring 的bean的scope设置成prototype, 就是每次都要创建一个实例, 可以看一下Spring的源码, 创建一个Spring实例是很复杂的一个过程, CGlib代理只是其中的一步,底层也是通过反射完成的, 我觉得耗时的关键不在 CGlib代理, 而是在整个Spring加载和实例化bean的过程。 通常情况下使用Spring来管理bean都是将scope设置成singleton, 这样bean实例就是一个单例, 不用每次getBean时都实例化一遍。 具体能不能用singleton要看你的实际应用场景了。

    官方帮助文档地址:阿里云帮助中心

    更多参考: 阿里云官方(新用户需官网注册查看)

    2021-06-02 11:16:03
    赞同 展开评论 打赏
  • 2019-07-17 19:04:48
    赞同 1 展开评论 打赏
  • Spring 的bean的scope设置成prototype, 就是每次都要创建一个实例, 可以看一下Spring的源码, 创建一个Spring实例是很复杂的一个过程, CGlib代理只是其中的一步,底层也是通过反射完成的, 我觉得耗时的关键不在 CGlib代理, 而是在整个Spring加载和实例化bean的过程。 通常情况下使用Spring来管理bean都是将scope设置成singleton, 这样bean实例就是一个单例, 不用每次getBean时都实例化一遍。 具体能不能用singleton要看你的实际应用场景了。

    2019-07-17 19:04:48
    赞同 展开评论 打赏
  • pplicationContext.getBean得到的结果用单例模式维持在内存里。。。

    2019-07-17 19:04:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载