JEE与Spring Boot代码性能比较分析
JavaEE与Spring Boot其实很难比较测试,前者适合单体SOA架构,后者适合微服务,但是还是有好事者把两者放在一起比较性能。
我把一些JEE和Spring代码放在一起做了同样的事情。Spring做了一些开箱即用的好东西,所以我在一些JEE示例中复制了它以提高性能。
测试环境:IBM JRE 8.0.5.22、IBM Liberty 18.0.0.3 App Server、底层使用Ubuntu Linux 18.04.1 LTS和MySQL 5.7.24以及MySQL 8.0.13 JDBC驱动程序。
硬件:采用AMD 2700x Ryzen处理器,在2600 GHz频率下具有32 GB内存。
实际结果:
- Spring可以节省一些编码时间
- Spring通常会为性能做出很好的选择,但是加入到JEE应用程序时,这些优势就会消失。
- Spring执行save()或findAll()之类方法时不履行@Transactional,Spring会更改隔离级别和事务传播。这使得Spring在执行非更新数据库的功能时具有优势,但是IMO,Spring应该真正尊重设置的隔离级别和传播。当改变JEE中的方法的隔离级别和传播时,JEE会更快。
简单REST调用 Liberty perfRESTJEE 3631 ms Liberty perfRESTSpring 2909 ms SpringBoot perfRESTSpring 3064 ms REST with JPA Liberty perfRESTJPAJEE 65531 ms Liberty perfRESTJPASpring 37076 ms SpringBoot perfRESTJPASpring 37757 ms REST with JPA (EclipseLink) Liberty perfRESTJPASpring-EL 37709 ms SpringBoot perfRESTJPASpring-EL 76791 ms
总结
以上所述是小编给大家介绍的JEE与Spring Boot代码性能比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
相关推荐
-
浅谈Spring Boot Web 应用性能优化
默认情况下,Spring Boot Web 应用会装配一些功能组件 Bean. 在大多数 Web 应用场景下,可以选择性地关闭一下自动装配的Spring 组件 Bean,以达到提升性能的目的. 配置项优化 Spring Boot Web 应用加速 完整配置项 management.add-application-context-header = false spring.mvc.formcontent.putfilter.enabled = false spring.autoconfigure.
-
JEE与Spring Boot代码性能比较分析
JavaEE与Spring Boot其实很难比较测试,前者适合单体SOA架构,后者适合微服务,但是还是有好事者把两者放在一起比较性能. 我把一些JEE和Spring代码放在一起做了同样的事情.Spring做了一些开箱即用的好东西,所以我在一些JEE示例中复制了它以提高性能. 测试环境:IBM JRE 8.0.5.22.IBM Liberty 18.0.0.3 App Server.底层使用Ubuntu Linux 18.04.1 LTS和MySQL 5.7.24以及MySQL 8.0.13 JD
-
Docker环境下Spring Boot应用内存飙升分析与解决场景分析
目录 Spring Boot应用内存飙升 服务现状 JVM默认内存设置 优化 限制JVM内存 参数解释 JVM常见参数 java.security.egd 作用 优化后的Dockerfile文件 优化后的效果 JVM参数设置是否生效 基础镜像优化 OpenJ9 GraalVM Fabric8 优化后的Dockerfile文件 优化后的效果 备注 Xmx < limit 支持springboot多环境和jvm动态配置的Dockerfile 参考 Spring Boot应用内存飙升 一个简单的Spr
-
Spring Boot 发送邮件功能案例分析
邮件服务简介 邮件服务在互联网早期就已经出现,如今已成为人们互联网生活中必不可少的一项服务.那么邮件服务是怎么工作的呢?如下给出邮件发送与接收的典型过程: 1.发件人使用SMTP协议传输邮件到邮件服务器A: 2.邮件服务器A根据邮件中指定的接收者,投送邮件至相应的邮件服务器B: 3.收件人使用POP3协议从邮件服务器B接收邮件. SMTP(Simple Mail Transfer Protocol)是电子邮件(email)传输的互联网标准,定义在RFC5321,默认使用端口25: POP3(Po
-
详解spring boot应用启动原理分析
前言 本文分析的是spring boot 1.3. 的工作原理.spring boot 1.4. 之后打包结构发现了变化,增加了BOOT-INF目录,但是基本原理还是不变的. 关于spring boot 1.4.* 里ClassLoader的变化,可以参考://www.jb51.net/article/141479.htm spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动
-
Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持
之前 Spring Boot 2.2没能按时发布,是由于 Spring Framework 5.2 的发布受阻而推迟.这次随着 Spring Framework 5.2.0 成功发布之后,Spring Boot 2.2 也紧跟其后,发布了第一个版本:2.2.0.下面就来一起来看看这个版本都更新了些什么值得我们关注的内容. 组件版本更新 这些Spring框架组件更新了依赖版本: Spring AMQP 2.2 Spring Batch 4.2 Spring Data Moore Spring Fr
-
spring boot jar的启动原理解析
1.前言 近来有空对公司的open api平台进行了些优化,然后在打出jar包的时候,突然想到以前都是对spring boot使用很熟练,但是从来都不知道spring boot打出的jar的启动原理,然后这回将jar解开了看了下,与想象中确实大不一样,以下就是对解压出来的jar的完整分析. 2.jar的结构 spring boot的应用程序就不贴出来了,一个较简单的demo打出的结构都是类似,另外我采用的spring boot的版本为1.4.1.RELEASE网上有另外一篇文章对spring
-
深入Spring Boot之ClassLoader的继承关系和影响
前言 对spring boot本身启动原理的分析,请参考://www.jb51.net/article/141478.htm Spring boot里的ClassLoader继承关系 可以运行下面提供的demo,分别在不同的场景下运行,可以知道不同场景下的Spring boot应用的ClassLoader继承关系. https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-classloader-context 分三种情况
-
.NET程序员如何入门Spring Boot详解
前言 本篇文章将教你作为一个.NET程序员如何快入门Spring Boot.你不需要用Eclipse,也不需要用IDEA.已经习惯了VS,其他的IDE-- 但不得不说VS Code很厉害,一用就喜欢.微软给VS Code提供了编写Java的插件,你可以在VS Code上愉快地写Java. 一.环境搭建 (1) 安装Java.配置环境变量.(教程很多,这里不多说) (2) 安装Maven和配置.参考https://www.cnblogs.com/eagle6688/p/7838224.html (
-
如何将JSP/Servlet项目转换为Spring Boot项目
创建Spring Boot应用 在基于Spring来重构JSP应用之前,我们先引入Spring Boot,使之成为一个Spring Boot应用.你只需要在原来的代码基础上,增加简单的配置和少量的代码即可引入Spring Boot,整个过程5分钟就能完成. 这里我们使用Maven来管理依赖,因为我们需要增加Spring Boot相关的依赖.也可以在Eclipse或者IntelliJ中创建一个新的Maven项目. 在POM文件中加入Spring Boot相关的配置. <parent> <g
-
Java Spring Boot消息服务万字详解分析
目录 消息服务概述 为什么要使用消息服务 异步处理 应用解耦 流量削峰 分布式事务管理 常用消息中间件介绍 ActiveMQ RabbitMQ RocketMQ RabbitMQ消息中间件 RabbitMQ简介 RabbitMQ工作模式介绍 Work queues(工作队列模式) Public/Subscribe(发布订阅模式) Routing(路由模式) Topics(通配符模式) RPC Headers RabbitMQ安装以及整合环境搭建 安装RabbitMQ 下载RabbitMQ 安装R
随机推荐
- angular2 ng build部署后base文件路径问题详细解答
- ANGULARJS中用NG-BIND指令实现单向绑定的例子
- 详细讲解安全升级MySQL的方法
- 如何让批处理程序启动的时候最小化
- 原生js实现的贪吃蛇网页版游戏完整实例
- 微信小程序中input标签详解及简单实例
- C#中GraphicsPath的Widen方法用法实例
- JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
- 详解Node.js利用node-git-server快速搭建git服务器
- jquery乱码与contentType属性设置问题解决方案
- AspNet中使用JQuery上传插件Uploadify详解
- 用脚本调用样式的几种方法
- JS文本框追加多个下拉框的值的简单实例
- 微信服务号推送模板消息接口
- java基于Apache FTP点断续传的文件上传和下载
- php中smarty变量修饰用法实例分析
- php blowfish加密解密算法
- java+vue实现添加单选题、多选题到题库功能
- php获取目录下所有文件及目录(多种方法)(推荐)
- 使用 docker-compose 运行 MySQL的方法