运行时数据区 参考 JDK 8 的官方文档,Java 虚拟机运行时数据区主要由以下部分组成: 程序计数器(Program Counter Register) Java 虚拟机栈(JVM Stack) 本地方法栈(Native Method Stack) Java 堆(Java Heap) 方法区(Method Area) 运行时常量池(Runtime Constant Pool) 程序计数器 程序计数器是一块较小的内存空间,用于指示当前线程执行字节码的行号; 程序计数器是线程独享的存储空间,生命周期与线程相同; 每…

2021-08-11 0条评论 1214点热度 0人点赞 SilverLining 阅读全文

类加载的时机 一个 Class 从被加载到 JVM 内存中开始,到卸载出内存位置,整个生命周期历经七个阶段: 加载 Loading 验证 Verification 准备 Preparation 解析 Resolution 初始化 Initialization 使用 Using 卸载 Unloading 其中,验证、准备和解析三个部分统称为连接(Linking)。 什么情况下虚拟机需要开始加载一个类,在虚拟机规范中并没有对此进行强制约束,这点可以交给虚拟机的具体实现来自由把握。 加载 Loading 在加载阶段,虚拟…

2021-08-11 0条评论 1193点热度 0人点赞 SilverLining 阅读全文

LifeCycle 接口 上一篇文章中提到,Tomcat 中主要有这些重要的组件: Server:Server 容器代表了一个 tomcat 实例(Catalina 实例),可以包含一个或多个 Service 容器; Service:Service 是提供具体的对外服务的,一个 Service 容器中可以有多个 Connector 组件(监听不同的端口请求并处理)和一个 Servlet 容器(做具体的业务处理逻辑); Engine 和 Host:Engine 组件是 Servlet 容器的核心,它支持定义多个虚拟主…

2021-02-11 0条评论 1371点热度 0人点赞 SilverLining 阅读全文

实现思路猜想 在正式开始看 Tomcat 源码前,我们先猜测一下它大致的实现思路。 Tomcat 官网的描述如下: The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication …

2021-02-08 0条评论 1141点热度 0人点赞 SilverLining 阅读全文

概述 Tomcat 主要有两部分核心功能: HTTP 服务器:实现 Socket 通信(TCP/IP),解析 HTTP 报文 Servlet 容器:提供一些默认 Servlet 的实现,管理自定义的 Servlet Servlet 容器是如何工作的 Servlet 容器是一个复杂的系统,但是,它有 3 个基本任务,对每个请求,servlet 容器会为其完成以下 3 个操作:: 创建一个 request 对象,用可能会在调用的 Servlet 中使用到的信息填充该 request 对象,如参数、头 cookie 、查…

2021-02-05 0条评论 1062点热度 0人点赞 SilverLining 阅读全文

Spring 中 IoC 、 DI 、 MVC 的基本原理 IoC(控制反转):使用容器保存 Spring 管理的所有对象,并管理其生命周期。 了解哪些对象需要被 spring 管理。 doScanner 方法:读取配置文件或者注解,找到开发者声明的需要依靠 spring 管理的类,扫描属性(例如 id 、 class 、 init-method 、 scope),记录相应属性,以便 DI 时可以进行注入。 将扫描到的需要交给 Spring 管理的类进行初始化。 doInstance 方法:按照扫描结果,将对象进行…

2020-04-18 0条评论 1361点热度 0人点赞 SilverLining 阅读全文

提出问题 在 V1 版本中,我们已经简单实现了 Mini Spring 最基本的功能,但是代码并不是很优雅,还存在着一些问题。例如: HandlerMapping 还不能像 Spring MVC 一样支持正则 URL 中的参数类型还不支持强制类型转换, 在反射调用前还需要重新获取 BeanName 本文将首先对 MiniSpring 中的 IoC 与 DI 的逻辑进行优化和重构。 从 Servlet 到 AppcationContext 先来回顾一下我们之前写的 IoC 与 DI 部分的流程: 调用 Servlet…

2020-04-02 0条评论 1516点热度 0人点赞 SilverLining 阅读全文

Spring 的运行思路 Spring 的整个启动流程大致可以分为三个阶段: 配置阶段 初始化阶段 运行阶段 梦开始的地方 spring 配置文件 首先,我们准备一个配置文件来模拟 spring-application.xml 中的配置,为了偷懒方便解析,我们就直接写一个 minispring-config.properties 文件: scanPackage=com.minispring.demo Servlet 配置文件 大家都知道,所有依赖于 Web 容器的项目都是从读取 web.xml 文件中的配置开始的,…

2020-03-31 0条评论 1382点热度 0人点赞 SilverLining 阅读全文

Spring 不仅是一个框架,Spring 已然成为一种生态。 Spring 诞生之前 在 Spring 诞生之前,Java 服务端的主要的技术栈还是 Servlet,JSP,EJB,Struts 。 在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,更多的还需要关注如何使这些对象协作来完成所需功能,而且还要尽量满足低耦合、高聚合的设计。 可能有人说了,使用 “抽象工厂” 、 “工厂方法模式” 不也可以帮我们创建对象,使用 “生成器模式” 来处理对象间的依赖关系…

2020-03-29 0条评论 2518点热度 2人点赞 SilverLining 阅读全文

前言 本文来总结回顾一下之前学习的 26 中设计模式。 在正文开始之前,先抛出一个问题:我们为什么要学习设计模式? GoF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一座隐性的"桥" 设计模式和 J2EE 在思想和动机上是一脉相承的,我总结了以下几个原因: 设计模式更抽象。 J2EE 是具体的产品代码,我们在日常工作中就可以接触到,而设计模式在对每个应用时才会产生具体代码; 设计模式是比 J2EE 等框架软件更小的体系结构, J2EE 中许多具体程序都是应用设计模式实现的。当你深入到 J2EE 的内…

2020-03-25 0条评论 1866点热度 0人点赞 SilverLining 阅读全文
12