【JDK17】开源应用服务器大比对

接着 next-public 源代码分析,Java 应用服务器选用 jetty。但是之前普遍使用 Tomcat,那为什么要用 jetty 么,除了这两个,Java 应用服务器开源现状并不了解,故而又是一篇科普性的笔记,以下是 又小又快的 Java 应用服务器,根据 启动速度、内存占用包大小 综合排序(开源免费,支持 Jakarta EE 规范或部分模块):


1. Jetty (嵌入式场景首选)

  • 包大小: ~15 MB(最小核心包)
  • 启动速度: <1秒(轻量级启动)
  • 内存占用: ~50 MB(基础服务)
  • 支持规范: Servlet、JSP、WebSocket(仅 Web Profile,不支持 EJB/JMS 等全功能)
  • 特点:
    • 极致轻量,适合嵌入式系统或微服务 API 网关。
    • 常用于 Spring Boot 内嵌服务器。
  • 适用场景: 高并发 Web 接口、轻量级 RESTful 服务。

2. OpenLiberty (云原生全功能)

  • 包大小: ~70 MB(基础包)
  • 启动速度: 1-3秒(优化后)
  • 内存占用: ~100-200 MB(默认堆)
  • 支持规范: Jakarta EE Web Profile 或 Full Profile(按需启用模块)
  • 特点:
    • 模块化设计,仅加载所需功能,启动快。
    • 支持微服务架构(兼容 MicroProfile)。
  • 适用场景: 云原生应用、容器化部署、快速迭代的微服务。

3. Apache TomEE (轻量级全功能)

  • 包大小: ~25 MB(Web Profile) / ~40 MB(Full Profile)
  • 启动速度: 3-5秒
  • 内存占用: ~150-300 MB
  • 支持规范: Jakarta EE Full Profile(集成 EJB、JMS 等)
  • 特点:
    • 基于 Tomcat 扩展,全功能但保持轻量化。
    • 适合需要 EJB 等企业功能的中小型项目。
  • 适用场景: 中小型 Jakarta EE 应用、传统企业系统迁移。

4. Quarkus (非全功能但极致性能)

  • 包大小: ~10-50 MB(根据 Native 编译优化)
  • 启动速度: <0.1秒(Native 模式) / 1-2秒(JVM 模式)
  • 内存占用: ~20-50 MB(Native 模式)
  • 支持规范: 部分 Jakarta EE 标准(如 Servlet、CDI) + MicroProfile
  • 特点:
    • 专为云原生设计的超轻量框架,支持 GraalVM Native 编译。
    • 非全功能 Jakarta EE,但性能碾压传统服务器。
  • 适用场景: Serverless 函数、Kubernetes 原生应用、极致性能需求。

5. WildFly (高性能全功能)

  • 包大小: ~200 MB(完整包)
  • 启动速度: 5-10秒
  • 内存占用: ~300-500 MB(默认堆)
  • 支持规范: Jakarta EE Full Profile(完整企业功能)
  • 特点:
    • 全功能企业级服务器,性能优化出色。
    • 适合需要复杂事务、分布式缓存的大型系统。
  • 适用场景: 大型分布式系统、高吞吐量企业应用。

对比排序表

服务器包大小启动速度内存占用全功能支持适用场景
Jetty~15 MB<1秒~50 MB❌ 仅 Web Profile嵌入式、API 网关
Quarkus~10-50 MB<0.1秒 (Native)~20-50 MB❌ 部分规范云原生、Serverless
OpenLiberty~70 MB1-3秒~100-200 MB✅ Web/Full Profile微服务、容器化
TomEE~25-40 MB3-5秒~150-300 MB✅ Full Profile中小型全功能应用
WildFly~200 MB5-10秒~300-500 MB✅ Full Profile大型企业系统、高并发

选型建议

  1. 追求极致轻量和速度Jetty(仅 Web 服务) 或 Quarkus(云原生)。
  2. 需要全功能且轻量化Apache TomEEOpenLiberty(按需模块化)。
  3. 大型复杂企业应用WildFly(性能与功能平衡)。

附加说明

  • Native 编译:Quarkus 和 OpenLiberty 支持 GraalVM Native Image,可进一步减少内存占用并提升启动速度(适合 Serverless 场景)。
  • 容器优化:OpenLiberty 和 Quarkus 提供官方 Docker 镜像,优化容器部署。
  • 性能测试数据参考: Techempower 基准测试 可查看各框架的吞吐量排名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35087.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11 lambda表达式、包装器、Bind绑定

Hello&#xff01;大家早上中午晚上好&#xff01;&#xff01;今天来复习C11三个新加的特性&#xff01;&#xff01; 一、lambda 表达式 1.1什么是lambda表达式&#xff1f; 语法&#xff1a;[捕捉列表]&#xff08;参数列表&#xff09;->返回值{函数体}&#xff1b; …

计算机网络:(二)计算机网络在我国发展与网络类别与性能 (附带图谱更好对比理解)

计算机网络&#xff1a;&#xff08;二&#xff09;计算机网络在我国发展与网络类别和性能 前言一、计算机网络在我国的发展二、计算机网络的类别1. 计算机网络的定义2. 不同类别的计算机网络&#xff08;1&#xff09;按覆盖范围分类&#xff08;2&#xff09;按传输技术分类…

CoreData 调试警告:多个 NSEntityDescriptions 声明冲突的解决

概述 目前在苹果生态 App 的开发中&#xff0c;CoreData 数据库仍然是大部分中小应用的优先之选。不过&#xff0c;运行时 CoreData 常常产生各种“絮絮叨叨”的警告不禁让初学的秃头小码农们云里雾里。 这不&#xff0c;对于下面这一大段 CoreData 警告&#xff0c;大家是否一…

解决QT_Debug 调试信息不输出问题

方式1 &#xff1a;手动通过添加环境变量解决 ->使用命令&#xff1a; QT_LOGGING_TO_CONSOLE1 qtcreator启动 ->如若还未输出qDebug调试信息 则在程序中引<QLoggingCategory>包 #include <QLoggingCategory> ->在程序入口添加 QLoggingCategory::defa…

【CF】Day9——Codeforces Round 953 (Div. 2) BCD

B. New Bakery 题目&#xff1a; 思路&#xff1a; 被标签害了&#xff0c;用什么二分&#xff08; 很简单的思维题&#xff0c;首先如果a > b&#xff0c;那么全选a就行了&#xff0c;还搞啥活动 否则就选 b - a 天来搞活动&#xff0c;为什么&#xff1f; 首先如果我…

[MAVEN][经验总结]MAVEN_HOME和M2_HOME的配置建议

前言 MAVEN_HOME和M2_HOME都是maven的环境变量&#xff0c;要配置哪个&#xff0c;与maven版本有关&#xff0c;我在实操过程中遇到相关的问题&#xff0c;现记录如下。 MAVEN_HOME和M2_HOME的区别 MAVEN_HOME 和 M2_HOME 本质上是同一个作用的环境变量&#xff0c;它们的区…

力扣Hot100——169. 多数元素

解法1&#xff1a;使用HashMap 将nums数组映射到HashMap中&#xff0c;键为nums的值&#xff0c;值为nums中值的数量&#xff1b; 然后遍历哈希表&#xff0c;返回值最大的键 class Solution {private Map<Integer, Integer> countNums(int[] nums) {Map<Integer, Int…

EasyRTC嵌入式音视频通话SDK:微信生态支持、轻量化架构与跨平台兼容性(Linix/Windows/ARM/Android/iOS/LiteOS)

随着WebRTC技术的不断发展&#xff0c;实时音视频通信在各个领域的应用越来越广泛。EasyRTC嵌入式音视频通话SDK作为一款基于WebRTC技术的实时通信解决方案&#xff0c;凭借其强大的功能和灵活的集成能力&#xff0c;受到了越来越多开发者的关注。 一、系统架构设计 纯C语言开…

QuickAPI:一键将 Excel 数据转为数据库表

在开发和数据管理中&#xff0c;将 Excel 数据快速导入数据库是一项常见需求&#xff0c;但手动建表和导入的过程往往让人头疼。 QuickAPI 作为一款高效的统一数据服务平台&#xff0c;提供了一键将 Excel 数据转为数据库表的功能&#xff0c;极大简化了操作流程。本文将以技术…

【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中&#xff0c;我们已经学过了多表查询的一种&#xff1a;联合查询&#xff08;union&#xff09;。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先&#xff0c;我们想要查询emp表和stu表两个表&#xff0c;按照我们之前的知识栈&#xff0c;我们直接使用…

JavaScript如何做类型转换

一、类型转换 二、补充 console.log(1 "2" "2"); // 122 console.log(1 "2" "2"); // 32 console.log(1 -"1" "2"); // 02 console.log("1" "1" "2"); // 112 consol…

华为中小型企业项目案例

实验目的(1) 熟悉华为交换机和路由器的应用场景 (2) 掌握华为交换机和路由器的配置方法 实验拓扑实验拓扑如图所示。 华为中小型企业项目案例拓扑图 实验配置市场部和技术部的配置创建VLANLSW1的配置 [LSW1]vlan batch 10 20 [LSW1]q…

【PyTorch][chapter-35][MLA]

前言&#xff1a; MLA&#xff08;Multi-head Latent Attention&#xff0c;多头潜在注意力&#xff09;旨在提高推理效率和降低计算资源的消。MLA的核心思想在于通过信息转移来优化KV缓存的使用 MLA的技术特点主要包括&#xff1a; KV压缩与潜在变量&#xff1a;将键&#xff…

Spring Cloud 中的服务注册与发现: Eureka详解

1. 背景 1.1 问题描述 我们如果通过 RestTamplate 进行远程调用时&#xff0c;URL 是写死的&#xff0c;例如&#xff1a; String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 当机器更换或者新增机器时&#xff0c;这个 URL 就需要相应地变…

微服务存在的问题及解决方案

微服务存在的问题及解决方案 1. 存在问题 1.1 接口拖慢 因为一个接口在并发时&#xff0c;正好执行时长又比较长&#xff0c;那么当前这个接口占用过多的 Tomcat 连接&#xff0c;导致其他接口无法即时获取到 Tomcat 连接来完成请求&#xff0c;导致接口拖慢&#xff0c;甚至…

centos 安装pip时报错 Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

centos 安装pip时报错 [rootindex-es app-ai]# yum update Loaded plugins: fastestmirror Repository centos-sclo-rh is listed more than once in the configuration Determining fastest mirrors Could not retrieve mirrorlist http://mirrorlist.centos.org?archx86_64…

解决图片转 ICO 图标难题,支持批量处理

还在为图片转 ICO 图标发愁吗&#xff1f;别担心&#xff0c;今天为大家带来一款超实用的工具 ——Any to Icon。它功能强大&#xff0c;可实现批量图片转 ICO 图标&#xff0c;轻松解决格式转换难题。更棒的是&#xff0c;这款工具极为小巧&#xff0c;无需安装&#xff0c;即…

MultiPost--多平台博客发布工具

网站介绍 一键发布内容到多个社交平台的浏览器插件&#xff0c;支持知乎、微博、小红书、抖音等主流平台&#xff0c;支持文字、图片、视频等内容形式. 地址 GitHub &#xff1a; https://github.com/leaper-one/MultiPost-Extension Chorme: https://chromewebstore.google.…

Linux进程状态详解:僵尸进程与孤儿进程的深度探索与实践

文章目录 前言一、进程状态概述1.1 运行状态1.2 阻塞状态1.3 挂起状态 二、具体的Linux操作系统中的进程状态2.1 Linux内核源代码2.2 查看进程状态2.3 D磁盘休眠状态(Disk sleep)D状态的定义&#xff1a; 2.4 T停止状态(stopped)停止状态的概述&#xff1a;停止状态的触发条件&…

【Linux】深入理解进程和文件及内存管理

个人主页~ 深入理解进程和文件及内存管理 一、重谈Linux下一切皆文件二、操作系统对物理内存的管理1、物理内存与磁盘的数据交互2、操作系统对物理内存的管理 三、文件页缓冲区向文件写入数据的过程 四、动态库是如何被加载的关于动态库中的全局变量 五、深入理解地址1、程序地…