最近在性能优化,今天在测试的时候发现:
我自己 new 的类调用方法只要 0.0001ms
通过 spring 管理自动注入的方式,调用同样的方法就要 200-300ms????
为了排除干扰方法内容都注释了直接返回 null
我自己 new 的类调用方法只要 0.0001ms
通过 spring 管理自动注入的方式,调用同样的方法就要 200-300ms????
为了排除干扰方法内容都注释了直接返回 null
1
Yuicon OP 有大神知道原因么,看到自己接口只有 20 不到的 qps,我急啊
|
2
fkdog Nov 26, 2019
因为 spring 注入的类都是通过 cglib 之类的字节码框架增强代理过的,经过反射之类的机制性能肯定会下降。
但是 200-300ms 就有点夸张了。 你确定不是其他地方有干扰。 |
4
lhx2008 Nov 26, 2019 via Android
我不知道你是从哪里算起,如果是 HTTP 算起,你可以拋异常看一下调用栈有多深,这个速度也很正常
|
6
sagaxu Nov 26, 2019 via Android
正常几万 QPS 还是有的,框架本身消耗不大
|
7
Yuicon OP @sagaxu 我测了下 redis 只有 1ms 的消耗 但是被 bean 的方法一包 一下就 2-300ms 的速度了 那些几万 qps 的都是不用 spring 的么
|
8
passerbytiny Nov 26, 2019
cglib 或者对象代理,应该也只是初始化 Bean 的时候慢,反射机制虽然慢一点,但这个慢只是略微慢,不做针对性测试可能就测不出来。
我能想到的有两个原因:一,配置了切面,切面慢;二,bean 不是单例模式,每次都会初始化。 |
9
Yuicon OP @passerbytiny 确实是你说的切面的问题,我才发现在类级别配置了事务 去掉后就是正常的 0.00001ms 了
|
10
huhujin Nov 26, 2019
spirng 的 bean 只是在初始化的 时候 一般单例初始化好了.调用 就算经过几个 aop 也不慢很多.200ms 都是 api 返回的速度; 和代码执行不是一个数量级的.
|
13
gz911122 Nov 26, 2019
感觉你测错了...
bean 的注入是注入时的耗时,调用时是正常的.. 所以原因如 8L 说 一,配置了切面,切面慢;二,bean 不是单例模式,每次都会初始化。 |
14
LuckyBoyGirl Nov 26, 2019
调用 spring 注入以后,再调用一次试试,看看多长时间
|
15
Yuicon OP @LuckyBoyGirl 问题是事务的锅,去掉后就没问题了
|