Quarkus vs Spring

Quarkus vs Spring

Quarkus和Spring都提供了用于构建现代Java应用程序的全面技术和工具堆栈。虽然Quarkus更符合Java EE标准(例如CDI和JAX-RS),但是Spring提供了围绕其核心容器的替代模块化体系结构。

本文包含内容

前言:GraalVM介绍

1 功能比较

2 性能比较

3 本地镜像支持

0 前言GraalVM介绍

GraalVM可作为GraalVM社区版和GraalVM 企业版提供。GraalVM社区版本基于OpenJDK版本1.8.262和OpenJDK版本11.0.8。GraalVM Enterprise版本基于Oracle JDK 1.8.0_261版和Oracle JDK 11.0.8版。GraalVM发行版可用于AMD64系统上的Linux,macOS和Windows平台以及AARCH64系统上的Linux平台。GraalVM是一款高性能运行时环境,可显着改善应用程序的性能和效率,非常适合微服务。它设计用于以Java、JavaScript、python,基于LLVM的语言(例如C和C ++)以及其他动态语言编写的应用程序。它消除了编程语言之间的隔离,并实现了共享运行时的互操作性。

与JVM的区别:

  • JIT编译器
  • 支持本地镜像,允许提前编译JAVA APP
  • 支持多种语言运行时环境(基于Truffle Language)

1 功能比较

功能QuarkusSpring
构建time类初始化10
Kubernetes资源生成10
GraalVM本地镜像支持1受限
依赖注入与容器管理CDI、Spring DI extensionSpring Core
Web/ REST API 开发JAX-RS, Spring Web extensionSpring MVC, Spring WebFlux, JAX-RS
Reactive / non-blocking web stackVert.xReactor Netty
REST ClientsVert.x WebClient, MicroProfile Rest ClientRestTemplate, WebClient, Feign
JSON 序列化JSON-B, JacksonJackson, JSON-B
Simplified data accessPanache, Spring Data JPA extensionSpring Data: JPA, JDBC, MongoDB, LDAP, KeyValue
Reactive data accessReactive SQL Clients, Reactive MongoDB ClientSpring Data R2DBC
Hibernate支持11
认证与授权Elytron SecuritySpring Security
应用监控MicroProfile Health, MicroProfile MetricsSpring Boot Actuator
Resilience & Fault toleranceMicroProfile Fault ToleranceNetflix Hystrix
Kotlin支持11
线上project生成https://code.quarkus.io/https://start.spring.io/

2 性能比较

描述:本部分主要比较Spring与Quarkus官网最简单demo启动时间,以及使用RESTEasy和Spring Boot Web应用程序对Quarkus应用程序进行GC后的堆使用情况,基于JDK 1.8.0_201

1启动时间与内存占用

Quarkus启动时间

Quarkus startup time

Spring启动时间

Spring startup time

Quarkus heap 内存占用

Quarkus heap memory usage

Spring heap内存占用

Spring heap memory usage

结论:Quarkus启动时间比Spring少一倍,占用内存差不多也少一倍

2首次请求访问所需时间

本测试采用node.js计算demo启动后首次访问所需时间,测试代码位置github repository.

quarkus

First response time - Quarkus

spring

First response time - Spring Boot

3GraalVM本地性能

将Quarkus打包为GraalVM本机映像时,启动速度要快一个数量级,并且使用的堆要更小。

3GraalVM本地镜像支持

对于Spring,目前对于GraalVM本地镜像仅仅提供实验性支持,当Spring 5.3 时,将提供更成熟的方案。

对于Quarhus,已经提供了对GraalVM本机映像的开箱即用的支持,并且通过应用以下修改,可以轻松地规避Java本机映像的限制:

1反射

默认情况下,GraalVM删除所有未在调用树中直接使用的类/方法/字段。所以,有必要手动注册将使用反射操作的类(例如,需要使用使用反射的框架进行序列化的模型/域类),方法是使用@RegisterForReflection进行注释,或者当类无法被修改时,使用配置文件(例如第三方库)。当Quarkus可以在构建时通过分析代码自动推断出某些类时,不需要注册某些类以进行反射。(例如 REST 方法)

2类初始化

默认情况下,所有类都是由Quarkus在构建时初始化的。当必须在运行时完成类初始化时,可以使用–initialize-at-run-time = 构建参数。

3代理类

代理类必须在映像构建时通过使用build参数-H:DynamicProxyConfigurationResources = <逗号分隔的配置资源>指定它们实现的接口列表来定义

4resources存放

默认情况下,只有 META-INF/resources 下的资源文件能在本地可执行文件内找到,此外绑定更多的资源到本地可执行文件中,需要使用resources-config.json进行配置。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值