每天一个面试题之类加载机制、spirngboot的启动机制

jvm 类加载机制

Java虚拟机(JVM)的类加载机制是Java的关键部分,它负责加载、链接和初始化类。类加载机制的主要任务是将Java类的字节码文件转换为可以在JVM上执行的运行时数据结构。这个过程包括以下三个主要步骤:

  • 加载(Loading):在此阶段,类加载器负责查找并加载类的字节码文件。这个过程通常从类路径(Classpath)开始,可以包括本地文件系统、网络资源或JAR文件。加载完成后,字节码被存储在内存中,并被用于后续的步骤。

  • 链接(Linking):链接分为三个子阶段:

    • a. 验证(Verification):在此阶段,JVM确保加载的字节码是有效的,并且没有被篡改。这有助于保护系统免受恶意代码的攻击。
    • b.准备(Preparation):在此阶段,JVM为类的静态变量分配内存并初始化为默认值。例如,数值类型默认为0,引用类型默认为null。
    • c.解析(Resolution):在此阶段,虚拟机将符号引用转换为直接引用,例如将类或接口的符号引用转换为对应的直接引用地址。这个过程可以在运行时发生,也可以在编译时提前发生。
  • 初始化(Initialization):在此阶段,类的静态初始化代码块(static块)被执行。这意味着静态变量被赋予了初始值,而且静态块中的代码被执行。这个阶段的执行是按需的,只有在首次使用类或访问静态成员时才会触发。

JVM采用了一种称为"类加载器委托模型"的机制来管理类的加载。这个模型包括以下几个关键特点:

  • 双亲委派(Parent Delegation):类加载器按照层次结构组织,每个类加载器都有一个父加载器。当一个类加载器收到加载类的请求时,它首先委托给父加载器加载。只有在父加载器无法加载该类时,子加载器才会尝试加载。

  • 缓存机制:一旦类被加载,JVM通常会将类的二进制数据缓存起来,以避免重复加载相同的类。

  • 命名空间(Namespace):不同的类加载器加载的类处于不同的命名空间中,这意味着即使两个类具有相同的全限定名,它们也可以在不同的类加载器下并存,不会发生冲突。

这些机制确保了类的一致性、安全性和避免了类的重复加载。理解JVM的类加载机制对于Java程序员非常重要,因为它有助于解决类加载相关的问题,并确保Java程序的稳定性和可靠性。

springboot 启动机制

Spring Boot 是一个用于构建独立的、生产级别的Spring应用程序的开发框架。Spring Boot的启动机制相对简单,主要通过main方法来启动应用程序。以下是Spring Boot应用程序的启动机制的关键点:

主类(Main Class):Spring Boot应用程序的入口点是一个Java类,通常带有public static void main(String[] args)方法。这个类被称为主类,通常包含@SpringBootApplication注解。

@SpringBootApplication注解:@SpringBootApplication是一个复合注解,包括@Configuration、@EnableAutoConfiguration和@ComponentScan。它告诉Spring Boot应用程序将自动配置并扫描类路径中的组件。

  • 启动过程:当您运行主类中的main方法时,Spring Boot应用程序的启动过程开始。它会执行以下步骤:

    • a. 创建Spring应用上下文(ApplicationContext):Spring Boot会创建一个应用上下文,该上下文包含了应用程序的所有组件,如控制器、服务和存储库等。
    • b. 自动配置(Auto-Configuration):Spring Boot会自动配置应用程序,根据类路径上的依赖项和配置属性,自动配置数据库连接、Web服务器、消息队列等等。
    • c. 运行嵌入式Web服务器:如果应用程序包含Web组件,Spring Boot将启动嵌入式Web服务器(如Tomcat、Jetty或Undertow),并将Web应用程序部署到该服务器上。
    • d. 执行应用程序逻辑:Spring Boot执行主类中定义的应用程序逻辑,包括请求处理、业务逻辑等。
  • 启动参数和配置:Spring Boot允许您通过命令行参数、配置文件(如application.properties或application.yml)以及环境变量来配置应用程序的行为。这些配置可以用于自定义应用程序的行为和属性。

  • 热部署(Hot Reloading):Spring Boot支持热部署,这意味着您可以在不重启应用程序的情况下修改代码和资源文件,并立即看到变化。

Spring Boot的启动机制是通过执行主类的main方法来创建应用程序上下文、自动配置应用程序、启动嵌入式Web服务器,并执行应用程序逻辑。Spring Boot的设计目标是使开发者能够快速构建生产级别的Spring应用程序,而无需繁琐的配置。这使得Spring Boot成为开发现代Java应用程序的理想选择。

你可能感兴趣的:(java常见问题,java,spring,spring,boot)