通过 SpringBoot 的 SpringApplicationRunListener 、BeanPostProcessor 原理和源码调试等手段排查发现,在 Bean 扫描和 Bean 注入这个两个阶段有很大的性能瓶颈。
组里的实习生妹妹讲了一次Springboot的启动,讲着讲着就讲到Spring的bean的生命周期去了,我心想坏了,这妮子估计把Springboot和Spring的相关逻辑给混淆了,这必须得给她治一治。
它的 NB 之处在于它利用了 libjvm.so 中 JVM 内部的 API AsyncGetCallTrace 来获取 Java 函数堆栈,精简后的伪代码如下:你可能要说获取个堆栈还需要搞这么复杂,jstack 等工具不是实现的很好了吗?