Spring MVC执行流程

简单来说:客户端发送请求 -> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射 HandlerMapping 解析请求对应的 Handler -> HandlerAdapter 会根据 Handler 来调用真正的处理器来处理请求,并处理相应的业务逻辑 -> 处理器返回一个模型视图 ModelAndView -> 视图解析器进行解析 -> 返回一个视图对象 -> 前端控制器 DispatcherServlet 渲染数据(Model)-> 将得到视图对象返回给用户。

我们知道当堆中内存满了的时候,JVM就会使用可达性分析算法,检查对象是否有被 GC Root 引用。如果一个对象没有被任何 GC Root 引用,那就说明它是一个无效的对象,就会被垃圾回收器回收。此外,即使是被一个 GC Root 引用,但如果是弱引用,那这个对象任然有被回收的风险。

现在我们知道了什么情况下一个对象会被回收,那 JVM 是怎么回收一个对象的呢?

重新回过头来看一些 JVM,思考一个问题:分出一个永久代我可以理解,为什么又要把堆分成新生代和老年代呢?私以为划分成新生代和老年代是因为它们里面对象的性质不同,要用不同的垃圾回收算法来回收效率才高,是为垃圾回收器服务才分出新生代和老年代的。

本文说明新生代、老年代和永久代中对象的特性,以及何时它们何时触发 GC。

记得一年前 Spring Cloud、Docker + k8s 才刚才火起来呀,当时公司的系统刚转成 Docker 部署,使用的分布式框架任然是 Dubbo。

现在也就相隔一年半, JD 上 Spring Cloud 已经成标配了,份额看着比 Dubbo 还大。Docker + k8s 也已经是一个加分项被写在 JD 上了。

为了知识体系的完整性,今天撸了一个 Spring Cloud 的 Demo。