AOT有什么优点?为什么不全部使用AOT呢?
JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation) 。和 JIT 不同的是,这种编译模式会在程序被执行前就将其编译成机器码,属于静态编译(C、 C++,Rust,Go 等语言就是静态编译)。AOT 避免了 JIT 预热等各方面的开销,可以提高 Java 程序的启动速度,避免预热时间长。并且,AOT 还能减少内存占用和增强 Java 程序的安全性(AOT 编译后的代码不容易被反编译和修改),特别适合云原生场景。
JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation) 。和 JIT 不同的是,这种编译模式会在程序被执行前就将其编译成机器码,属于静态编译(C、 C++,Rust,Go 等语言就是静态编译)。AOT 避免了 JIT 预热等各方面的开销,可以提高 Java 程序的启动速度,避免预热时间长。并且,AOT 还能减少内存占用和增强 Java 程序的安全性(AOT 编译后的代码不容易被反编译和修改),特别适合云原生场景。
什么是双清委派
“双清委派”可能是一个误解或误写的术语,在计算机科学和相关领域中,更常见的术语是“双亲委派模式”(也称为“双亲委派机制”)。这一机制主要在Java虚拟机(JVM)的类加载过程中发挥作用。
双亲委派模式的定义
双亲委派模式是指Java虚拟机在加载类时采用的一种加载策略。具体来说,当一个类加载器收到类加载的请求时,它并不会自己先去加载该类,而是将这个请求委托给父类的加载器去执行。这个过程会一直递归进行,直到达到顶层的引导类加载器(Bootstrap ClassLoader)。如果父类加载器能够完成类加载任务,就成功返回;如果父类加载器无法完成类加载任务,子加载器才会尝试自己去加载。
双亲委派模式的作用
- 避免重复加载:通过双亲委派模式,可以确保同一个类只被加载一次,从而避免重复加载导致的资源浪费和潜在的问题。
- 保护核心类库:双亲委派模式还可以防止恶意代码通过自定义类加载器来篡改Java的核心类库。因为任何自定义的类加载器在尝试加载核心类库中的类时,都会先委托给父类加载器,而父类加载器通常会加载JDK自带的、经过验证的类文件。
双亲委派模式的实际应用
在Java的类加载体系中,类加载器按照层次结构进行组织,包括引导类加载器、扩展类加载器(Extension ClassLoader)、应用程序类加载器(Application ClassLoader)以及用户自定义的类加载器。这些类加载器之间遵循双亲委派模式进行类的加载。
例如,在加载jdbc.jar用于实现数据库连接的时候,因为jdbc.jar是基于Java中rt.jar中的SPI接口进行实现的,所以在加载的时候,由于SPI接口会调用实现类中的方法,所以这里jdbc.jar中的方法会被加载到内存中,此时就会进行双亲委派进行类加载。最终从Bootstrap ClassLoader类加载器中加载SPI核心类,然后加载SPI接口的实现类,此时Bootstrap ClassLoader会进行反向委派,通过线程上下文类加载器进行jdbc.jar的加载,从而避免类的重复加载并保护程序安全。
综上所述,“双清委派”可能是一个误解或误写的术语,而“双亲委派模式”是Java虚拟机在类加载过程中采用的一种重要机制。
SpringMvc、SpringBoot、Spring有什么区别
SpringMVC、Spring与Spring Boot都是Java企业级应用开发中的重要框架和工具,它们在定位、功能、配置方式以及应用领域等方面存在一些显著的区别。
Spring
- 定位与功能:Spring是一个综合性的应用程序开发框架,旨在简化企业级应用程序的开发。它提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等功能,并包含了用于构建Web应用程序的全功能MVC模块。
- 核心功能:Spring的核心功能是IoC(控制反转)容器和AOP(面向切面编程)。IoC容器帮助开发者管理对象之间的依赖关系,实现松耦合的应用程序设计。
- 应用领域:Spring主要用于企业级应用程序的开发,提供了丰富的功能,如数据访问、安全性、消息传递和集成等。
- 扩展性:Spring是一个综合性的框架,可以与其他模块集成,如Hibernate、iBatis、JMS、JDBC等。
SpringMVC
- 定位与功能:SpringMVC是Spring框架中的一个模块,专注于Web应用程序的开发。它实现了MVC(Model-View-Controller)模式,为表示层开发提供了一整套完备的解决方案。
- 核心功能:SpringMVC的核心功能是控制器(Controller)、视图解析器(View Resolver)等Web相关组件。这些组件用于协调请求和响应之间的关系,实现Web应用程序的开发。
- 应用领域:SpringMVC主要用于处理HTTP请求、渲染视图和处理表单等Web相关的任务。
- 扩展性:SpringMVC已经集成了Spring框架的许多功能,使得开发者可以更快速地开发Web应用程序。同时,它也支持与其他Spring模块(如Spring Security、Spring Data等)无缝集成。
Spring Boot
- 定位与功能:Spring Boot是一个基于Spring的框架,它使用了特定的配置方式,旨在简化新Spring应用的初始搭建以及开发过程。它遵循“约定优于配置”(Convention Over Configuration)的原则,提供了大量的自动配置,减少了配置文件(如XML或Java配置类)的数量和复杂度。
- 核心功能:Spring Boot的核心功能是自动化配置和starter POMs(项目对象模型)。starter POMs包含了构建特定类型应用所需的所有依赖,简化了依赖管理。
- 应用领域:Spring Boot不仅支持Web应用程序的开发,还可以用于构建微服务、RESTful API等。它提供了丰富的监控和管理功能,帮助开发者实时监控应用的运行状态和性能指标。
- 扩展性:Spring Boot集成了目前流行的开发框架和库,如MyBatis、Hibernate、Redis等,使得开发者能够快速搭建起一个功能完备的Spring应用。
总结
- Spring是一个全面的应用程序开发框架,提供了丰富的企业级应用开发功能。
- SpringMVC是Spring框架中的一个模块,专注于Web应用程序的开发,实现了MVC模式。
- Spring Boot则是一个基于Spring的框架,旨在简化Spring应用的初始搭建和开发过程,提供了大量的自动配置和starter POMs。