【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.pswp.cn/pingmian/72669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72669.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker-compose install nginx(解決fastgpt跨區域)

CORS前言 CORS(Cross-Origin Resource Sharing,跨源資源共享)是一種安全措施,它允許或拒絕來自不同源(協議、域名、端口任一不同即為不同源)的網頁訪問另一源中的資源。它的主要作用如下: 同源策略限制:Web 瀏覽器的同源策略限制了從一個源加載的文檔或腳本如何與另一…

算法刷題記錄——LeetCode篇(4) [第301~400題](持續更新)

(優先整理熱門100及面試150&#xff0c;不定期持續更新&#xff0c;歡迎關注) 322. 零錢兌換 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c;表示總金額。 計算并返回可以湊成總金額所需的最少的硬幣個數。如果沒有任何…

vulnhub靶場之loly靶機

前言 挑戰攻克該靶機30分鐘 靶機&#xff1a;loly靶機&#xff0c;IP地址為192.168.10.11 攻擊&#xff1a;kali&#xff0c;IP地址為192.168.10.6 靶機和攻擊機都采用VMware虛擬機&#xff0c;都采用橋接網卡模式 文章涉及的靶機及工具&#xff0c;都可以自行訪問官網或者項…

Deepseek API+Python測試用例一鍵生成與導出-V1.0.2【實現需求文檔圖片識別與用例生成自動化】

在測試工作中&#xff0c;需求文檔中的圖片&#xff08;如界面設計圖、流程圖&#xff09;往往是測試用例生成的重要參考。然而&#xff0c;手動提取圖片并識別內容不僅耗時&#xff0c;還容易出錯。本文將通過一個自研小工具&#xff0c;結合 PaddleOCR 和大模型&#xff0c;自…

Excel(函數篇):COUNTIF與CONUTIFS函數、SUMIF與SUMIFS函數、ROUND函數、MATCH與INDEX函數、混合引用與條件格式

目錄 COUNTIF和COUNTIFS函數COUNTIF函數COUNTIFS函數SUMIF和SUMIFS函數SUMIF函數SUMIFS函數SUMIFS函數與控件實現動態年月匯總ROUND、ROUNDUP、ROUNDDOWN函數單元格混合引用條件格式與公式,標記整行數據MATCH和INDEX函數COUNTIF和COUNTIFS函數 COUNTIF函數 統計下“蘇州”出現…

上位機數據可視化:使用QtCharts繪制波形圖

工程配置 CMake文件 find_package(Qt5 COMPONENTS Charts REQUIRED)target_link_libraries(zhd-desktop PRIVATE Qt5::Charts)包含頭文件以及名稱空間&#xff08;這個很重要&#xff0c;沒有包含名稱空間編譯器會提示找不到相關的類型&#xff09; #include <QtCharts&g…

S32K144入門筆記(十三):LPIT的API函數解讀

目錄 1. SDK中的函數 2. API函數的釋義 2.1 獲取默認參數 2.2 初始化 2.3 啟動與停止 2.4 計數值的設置于讀取 2.5 中斷API 1. SDK中的函數 在使用SDK的非抽象驅動函數時&#xff0c;函數的定義與聲明在文件lpit_driver.c和lpit_driver.h中&#xff0c;一共有19個函數&a…

CSS - Pseudo-classes(偽類選擇器)

目錄 一、介紹二、常用種類三、案例實現案例一&#xff1a;a標簽使用link/visited/hover/active案例二&#xff1a;表單元素使用focus/disabled案例三、通過其余偽類實現元素靈活選中 一、介紹 CSS 偽類&#xff08;Pseudo-classes&#xff09; 用于定義元素的特定狀態或結構位…

http proxy的原理是什么

Http代理的原理 代理服務器會自動提取請求數據包中的HTTP請求數據發送給服務端&#xff0c;并將服務端的HTTP響應數據轉發給發送請求的客戶端&#xff0c;HTTP代理服務器使用的端口通常是8080。 對于Web客戶端來說&#xff0c;代理扮演的服務器角色&#xff0c;接收請求&…

Ubuntu22.04虛擬機里安裝Yolov8流程

1. 安裝pytorch sudo apt install nvidia-cuda-toolkit nvcc --version # 官方適配地址&#xff1a;https://download.pytorch.org/whl/torch/import torch print(torch.__version__) print(torch.cuda.is_available())2. 安裝環境 # cuDNN 安裝&#xff1a;https://develop…

神經網絡微調技術解析

神經網絡微調技術 微調&#xff08;Fine-tuning&#xff09;是遷移學習的核心技術&#xff0c;通過在預訓練模型基礎上調整參數&#xff0c;使其適應特定任務或領域。以下從傳統方法、參數高效微調&#xff08;PEFT&#xff09;、新興技術三個維度展開&#xff0c;覆蓋主流技術…

Spring 聲明式事務管理

Spring 編程的方式實現事務管理&#xff0c;這樣太過麻煩&#xff0c;需要在每個方法上面加上相應的事務處理操作&#xff0c;聲明式事務處理能夠很好的解決這個問題&#xff0c;比如通過tx命名空間&#xff0c;這樣只需要配置就可以檢測到相關的方法&#xff0c;或者是通過tra…

電機控制常見面試問題(十五)

文章目錄 一、電機氣隙二、電氣時間三.電機三環控制詳解四.驅動板跳線意義五.電機開環自檢 一、電機氣隙 電機氣隙是定子和轉子之間的空隙&#xff0c;防止釘子轉子運轉時物理接觸&#xff0c;此外&#xff0c;氣隙是磁路的重要環節&#xff0c;磁場需通過氣隙傳遞能量&#x…

代碼隨想錄算法訓練營第六十五天| 圖論10

Bellman_ford 隊列優化算法&#xff08;又名SPFA&#xff09; 代碼隨想錄 import collectionsdef main():n, m map(int, input().strip().split())edges [[] for _ in range(n 1)]for _ in range(m):src, dest, weight map(int, input().strip().split())edges[src].append…

Chat2DB:讓數據庫管理像聊天一樣簡單

數據庫工具的痛點與破局 在數據爆炸的時代&#xff0c;數據庫管理工具已成為企業高效運營的剛需。然而&#xff0c;傳統工具如Navicat、DBeaver雖功能強大&#xff0c;卻讓非技術人員和SQL新手望而卻步。復雜的界面、繁瑣的手動操作、晦澀的語法規則&#xff0c;成為橫亙在數據…

Navicat for Snowflake 震撼首發,激活數據倉庫管理全新動能

近日&#xff0c;Navicat 家族迎來了一位全新成員 — Navicat for Snowflake。Snowflake 是一款基于云架構的現代數據倉庫解決方案&#xff0c;以其彈性擴展、高性能和易用性著稱。這次首發的Navicat for Snowflake 專為簡化 Snowflake 數據庫管理任務而精心打造。它憑借其直觀…

【項目合集】智能語音小車-微信小程序控制

功能需求&#xff1a; 車子檢測環境溫度、濕度&#xff0c;上報 APP、WEB 端顯示實時數據可通過 APP 控制小車前進、左轉、右轉可通過語音控制小車前進后退車上一個 LED 燈&#xff0c;可通過 WEB、小程序控制在 APP、WEB 上均可注冊登錄 硬件清單 硬件 功能 備注 ESP32 …

人工智能與人的智能,改變一生的思維模型分享【4】決策樹

決策樹&#xff08; DECISION TREE&#xff09; 一般由一個決策圖和若干可能的結果組成。是一種通過羅列解題的關鍵步驟以及各步驟發生的條件和結果&#xff0c;由此來創建到達目標的規劃。 我們很早就知道有一個方法&#xff0c;叫做當你苦悶、糾結的時候&#xff0c;把你的所…

利用余弦相似度在大量文章中找出抄襲的文章

我前面的2篇文章分別講了如果利用余弦相似度來判斷2篇文章的相似度&#xff0c;來確定文章是否存在抄襲&#xff0c;和余弦相似度的原理&#xff0c;即余弦相似度到底是怎么來判斷文章的相似性高低的等等。這一篇再說下&#xff0c;對于文章字數多和大量文章時&#xff0c;如果…

設計模式-對象創建

對象創建 前言1. Factory Method1.1 模式介紹1.2 模式代碼1.2.1 問題代碼1.2.2 重構代碼 1.3 模式類圖1.4 要點總結 2. Abstract Factory2.1 模式介紹2.2 模式代碼2.2.1 問題代碼2.2.2 重構代碼 2.3 模式類圖2.4 要點總結 3. Prototype3.1 模式介紹3.2 模式代碼3.3 模式類圖3.4…