Spring Boot 性能优化

「Spring Boot 新特性」节省95%内存占用 GraalVM[1]是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。最近比较火的 Java 框架 Quarkus[2]默认支持 GraalVM 下图为 Quarkus 和传统框架(SpringBoot) 等对比图, 更快的启动数据、更小的内存消耗、更短的服务响应。 Spring Boot 2.4 开始逐步提供对 GraalVM 的支持, 旨在提升上文所述的 启动、内存、响应的使用体验。 安装 GraalVM 目前官方社区版本最新为 20.3.0 ,是基... 阅读详情

Spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题。但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代。Spring Boot 让我们创建和运行项目变得更为迅速,现在已经有越来越多的人使用它。我们已经在几个项目中使用了 Spring Boot ,今天我们就来一起讨论一下如何改进 Spring Boot 应用的性能。

首先,从之前我在开发中遇到的一个问题说起。在一次查看项目运行日志的时候,我偶然发现了一个问题,日志里显示这个项目总是加载 Velocity 模板引擎,但实际上这个项目是一个没有 web 页面的 REST Service 项目。于是我花了一点时间去寻找产生这个问题的原因,以及如何改进 Spring Boot 应用的性能。在查找了相关的资料后,我得出的结论如下:

组件自动扫描带来的问题

默认情况下,我们会使用 @SpringBootApplication 注解来自动获取应用的配置信息,但这样也会给应用带来一些副作用。使用这个注解后,会触发自动配置( auto-configuration )和 组件扫描 ( component scanning ),这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的作用是一样的。这样做给开发带来方便的同时,也会有三方面的影响:

1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。

2、会加载一些不需要的多余的实例(beans)。

3、会增加 CPU 消耗。

针对以上三个情况,我们可以移除 @SpringBootApplication 和 @ComponentScan 两个注解来禁用组件自动扫描,然后在我们需要的 bean 上进行显式配置:

// 移除 @SpringBootApplication and @ComponentScan, 用 @EnableAutoConfiguration 来替代
@Configuration
@EnableAutoConfiguration
public class SampleWebUiApplication {

    // ...

    // 用 @Bean 注解显式配置,以便被 Spring 扫描到
    @Bean
    public MessageController messageController(MessageRepository messageRepository) {
        return new MessageController(messageRepository);
    }

如何避免组件自动扫描带来的问题

我们在上面提到,@SpringBootApplication 注解的作用跟 @EnableAutoConfiguration 注解的作用是相当的,那就意味着它也能带来上述的三个问题。要避免这些问题,我们就要知道我们需要的组件列表是哪些,可以用 -Ddebug 的方式来帮助我们明确地定位:

mvn spring-boot:run -Ddebug
…
=========================
AUTO-CONFIGURATION REPORT
=========================


Positive matches:
-----------------

   DispatcherServletAutoConfiguration
      - @ConditionalOnClass classes found: org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
      - found web application StandardServletEnvironment (OnWebApplicationCondition)

...

接着拷贝 Positive matches 中列出的信息:

DispatcherServletAutoConfiguration
EmbeddedServletContainerAutoConfiguration
ErrorMvcAutoConfiguration
HttpEncodingAutoConfiguration
HttpMessageConvertersAutoConfiguration
JacksonAutoConfiguration
JmxAutoConfiguration
MultipartAutoConfiguration
ServerPropertiesAutoConfiguration
PropertyPlaceholderAutoConfiguration
ThymeleafAutoConfiguration
WebMvcAutoConfiguration
WebSocketAutoConfiguration

然后来更新项目配置,显式地引入这些组件,引入之后,再运行一下应用确保没有错误发生:

@Configuration
@Import({
        DispatcherServletAutoConfiguration.class,
        EmbeddedServletContainerAutoConfiguration.class,
        ErrorMvcAutoConfiguration.class,
        HttpEncodingAutoConfiguration.class,
        HttpMessageConvertersAutoConfiguration.class,
        JacksonAutoConfiguration.class,
        JmxAutoConfiguration.class,
        MultipartAutoConfiguration.class,
        ServerPropertiesAutoConfiguration.class,
        PropertyPlaceholderAutoConfiguration.class,
        ThymeleafAutoConfiguration.class,
        WebMvcAutoConfiguration.class,
        WebSocketAutoConfiguration.class,
})
public class SampleWebUiApplication {

在上面的代码中,我们可以删掉我们不需要的组件信息,来提高应用的性能,比如在我的项目中,不需要 JMX 和 WebSocket 功能,我就删掉了它们。删掉之后,再次运行项目,确保一切正常。

将Servlet容器变成Undertow

默认情况下,Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器。我们可以启动项目,然后用 VisualVM 或者 JConsole 来查看应用所占的内存情况:

这里写图片描述

以上是我使用 Spring Boot 的默认方式启动应用后,用 VisualVM 监控到的内存的占用情况:堆内存占用 110M,16 个线程被开启。

可以将 Web 服务器切换到 Undertow 来提高应用性能。Undertow 是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。Undertow 是红帽公司的开源产品,是 Wildfly 默认的 Web 服务器。首先,从依赖信息里移除 Tomcat 配置:

<exclusions>
        <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
</exclusions>

然后添加 Undertow:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

启动项目后,用 VisualVM 监控到的信息显示:堆内存占用 90M,13个线程被开启。

这里写图片描述

总结

这些都是我们在项目开发中使用到的一些优化 Spring
Boot 应用的小技巧,对于大的应用性能的提高还是很明显的。大家可以尝试一下,然后告诉我们你的测试结果。

最后,附上代码,大家可以去这里下载:spring-boot-performance。

文中大部分内容参考英国一个架构师的 博客 和 DZone 近期发布的文章,在此感谢两位大牛。参考文章及链接:

(1)Spring Boot 性能优化:Spring Boot Performance;

(2)Spring Boot 内存优化:Spring Boot Memory Performance;

(3)https://www.techempower.com/benchmarks/;

(4)Spring 应用程序优化:Optimizing Spring Framework for App Engine Applications。

OneAPM 为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。

ES与Spring Boot整合&性能优化 1、前言 首先说明,springboot和elasticsearch的兼容性并不是很好,主要是因为elasticsearch的版本之间API差异太大。向后兼容性不强,特别是es6和es7,差异巨大!所以大家一定要注意自己服务器es的版本和springboot的依赖坐标版本对应,如我本地es版本为7,所以我导入的依赖坐标如下: es7后操作模板使用ElasticsearchRestTemplate,已经集成了高级API! 2、集成准备工作 2.1 依赖坐标 <dependenc... 阅读详情

相关推荐

Spring Boot网站性能优化全解析

另外,Arch Linux下启用 noatime 和 nodiratime 选项减少磁盘访问,CentOS Linux下配置防火墙规则减少不必要连接和过滤,禁用不必要服务减少资源消耗。此外,还需设置合理JVM堆内存大小,配置GC日志分析垃圾回收情况,使用JVM工具监控性能,调整垃圾回收相关参数,开启JVM压缩指针减少堆内存占用,根据并发情况调整JVM线程池大小。配置持久化 /etc/sysctl.d/99-tuning.conf /etc/sysctl.conf。一、Spring Boot应用层优化。

weixin_30777913的博客 926

简单的springboot应用部署后内存占用量过大问题排查

docker stats 命令查看docker容器内存和CPU使用情况高内存使用量应用,进入容器 jps查询java 进程idjstat 命令查看年轻代和老年代内存使用量和分布。jmap查看内存详情,分析问题原因为:青年代没有设置或者设置的过大了。青年代过大触发GC频率过低。造成大量垃圾对象堆积在青年代不回收。而Eden区多次扩容导致。

d495435207的博客 6178

Spring Boot 项目中的性能优化

Spring Boot项目的性能优化是一个综合性的问题,需要从数据库、缓存、JVM、网络通信、异步处理、并发优化以及代码和架构等多个方面入手。通过合理的配置和代码优化,可以显著提升应用的性能和稳定性。

wjianwei666的专栏 1246

Spring Boot应用内存飙升分析与解决

  工作中常常发现:一个简单的应用,内存竟然达到的内存。   其实,有些服务的体量根本用不了这么多。那么,在中如果未设置参数时,是如何配置的呢?  当运行一个项目时,如果未设置参数,默认会采用自身默认的配置策略。在资源比较充足的情况下,开发者倒是不太用关心内存的设置。但一旦涉及到资源不足,JVM优化,那么就需要了解默认的。   关于内存最常见的设置为初始堆大小和最大堆内存。很多人懒得去设置,而是采用的默认值。特别是在开发环境下,如果启动的微服务比较多,内存会被撑爆。   而默认内存配置策略分两种场景,和。以

xgb2018的博客 8549

Java领域Spring Boot的性能优化技巧

Spring Boot凭借其简化配置、快速开发等特性,在Java开发领域得到了广泛应用。然而,随着应用规模的扩大和用户数量的增加,性能问题逐渐凸显。本文的目的是系统地介绍Spring Boot性能优化的技巧和方法,涵盖从代码层面到服务器配置层面的多个方面。范围包括对Spring Boot核心组件的性能调优、数据库交互优化、缓存机制的应用、服务器性能配置等内容。本文将按照以下结构进行组织:首先介绍核心概念与联系,让读者对Spring Boot性能相关的概念有清晰的认识;

Java大师兄的博客 818

Spring Boot与Java的性能优化秘籍

在当今数字化时代,软件系统的性能至关重要。Spring Boot作为一款广泛应用的Java开发框架,它简化了Spring应用的开发过程,但在处理大规模数据和高并发请求时,性能问题可能会逐渐凸显。Java作为Spring Boot的基础编程语言,其性能也会直接影响到整个应用的性能。因此,本文章的目的在于深入探讨Spring Boot与Java的性能优化方法,涵盖从代码层面到系统层面的多个方面,帮助开发者提升应用的响应速度、吞吐量和资源利用率。

Java大师兄的博客 876

【Springboot】内存占用过高解决

一直以来,springboot启动后,明明什么都没有,却要占最少2个G。 经过调查,可以调整jvm参数 经过了一番调查,发现了就是加两个参数 Java –jar $jar_file –Xms512m –Xmx1024m 加完了,发现没有什么卵用,然后好多都是这么写的,根本不好使,直到一个大佬的出现 # 正确的Java命令: java [ options ] class [ arguments ] java [ options ] -jar file.jar [ arguments ] 其实到这里,也找

Rex的博客 7654

Spring Boot 项目性能优化:你掌握了几个技巧?

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。

java专栏 1169

Spring Boot 缓存与性能优化

摘要 本文介绍了Spring Boot中缓存与性能优化的核心概念及实践方法。缓存作为临时存储区,能有效减少数据库压力、提升响应速度和吞吐量,常见类型包括内存缓存、分布式缓存和浏览器缓存。性能优化则通过缓存优化、数据库优化、代码优化等手段提升系统性能和用户体验。文章详细演示了Spring Boot集成Spring Cache的步骤,包括依赖配置、实体类定义、Repository接口实现等,并通过模拟数据库查询展示了缓存的实际应用效果。

编程世界如山海,探索不止。 8478

EPLAN二次开发实战指南:从API接口到定制化界面

本文为EPLAN二次开发实战指南,详细介绍了从搭建C#开发环境、理解API接口到创建定制化插件的完整流程。通过实战案例,如批量修改设备属性和设计交互式界面,帮助电气工程师利用EPLAN二次开发实现工作流程自动化与深度定制,从而显著提升设计效率。

weixin_29246195的博客 804

基于FastLIO2与TEB算法的机器狗自主导航系统实战

本文详细介绍了如何为机器狗构建一套基于FastLIO2与TEB算法的自主导航系统。通过整合FastLIO2激光惯性里程计实现精准定位,并采用TEB局部规划器进行灵活路径规划与动态避障,解决了传统方案在复杂地形下反应慢、易碰撞的问题。文章提供了从环境搭建、算法部署、地图转换到系统调试的完整实战指南,帮助开发者实现机器狗的稳健自主行走。

beer8的博客 320

Spring Boot性能优化详解

Spring Boot性能优化需从多维度入手,包括应用层、数据库、缓存、JVM和网络优化。关键指标涉及响应时间、吞吐量、资源利用率和错误率。JVM优化可通过参数调整(如-Xms/Xmx)、垃圾回收策略(G1GC)和内存管理(对象池)实现。数据库优化重点在于连接池配置(HikariCP)、查询优化(索引、分页、批量操作)和索引设计(复合/覆盖索引)。通过JMeter等工具进行性能测试,结合代码级优化(如并发集合、原子变量)和架构调整,可全面提升应用性能。

程序员大凯的博客 573

利用OTSU阈值算法在ZYNQ上实现浒苔识别

利用OTSU阈值算法进行图像二值化,结果用HDMI显示

qq_38075564的博客 1275

性能优化 - 高级进阶: Spring Boot服务性能优化

性能优化实践指南:监控与剖析 本文系统介绍了性能优化的关键前置步骤——指标监控与性能剖析。通过集成Prometheus实现指标采集(包括JVM、缓存命中率等核心指标),并配合Grafana可视化监控。同时详细讲解了async-profiler工具的使用方法,包括火焰图生成方式。文章强调"数据驱动优化"理念,指出必须先建立完善的监控体系,获取真实运行数据后再针对性优化,避免盲目调整。配套的系列文章还涵盖了从理论到实践的完整性能优化知识体系,包括七类技术手段、诊断方法和11种接口优化方案等。

小工匠 2226

PID算法(位置式pid算法和增量式pid算法)

PID 算法是闭环控制系统中常用的算法,PID 分别是 Proportion(比例)、Integral(积分)、Differential(微分)的首字母缩写。它是一种结合比例、积分和微分三个环节于一体的闭环控。

m0_57678852的博客 2万+

react-window 大数据列表和表格数据渲染组件之虚拟滚动

ReactWindow是一个高性能的React虚拟滚动组件库,专门用于高效渲染大型列表和表格数据。它通过“窗口化”技术,仅渲染用户可见区域的内容,大幅提升性能并减少内存消耗。主要特点包括:支持固定/可变大小列表项、多种布局类型(垂直/水平/网格)、轻量级设计(不足5KB)以及平滑的滚动体验。相比传统渲染方式,它能轻松处理成千上万条数据,并提供自动滚动、自适应容器大小等高级功能。与同类库相比,ReactWindow具有更简洁的API和更优的性能表现,是处理大数据量渲染场景的理想选择。

前端开发-前端技术分享 1136

【Spring Boot性能优化技巧】

以上是一些基本的性能优化建议,实际应用中可能需要根据具体情况进行更细致的分析和调整。随着技术的不断发展,持续学习和实践是每个开发者的必修课。Spring Boot以其简化配置和快速开发的特点,已经成为Java开发中的主流框架。然而,在面对高并发和大数据量的场景时,性能优化就显得尤为重要。使用SpringSession或Spring Security的Session管理功能,配置合理的Session策略,减少内存消耗。根据应用需求配置合适的线程池,避免默认线程池带来的性能问题。

qq_33545255的博客 658

深入解析BlueZ5与D-Bus:Linux蓝牙开发实战指南

本文深入解析BlueZ5与D-Bus在Linux蓝牙开发中的核心应用,提供从环境搭建到实战开发的完整指南。通过详细代码示例和调试技巧,帮助开发者掌握蓝牙协议栈与D-Bus接口的交互方法,实现高效蓝牙设备管理与GATT服务开发。

weixin_28292761的博客 449

Spring Boot性能优化案例

记住,优化通常是一个迭代过程,你应该使用分析工具和监控来衡量变化的影响,以确保你在启动时间和内存使用方面取得了预期的改进。spring.main.lazy-initialization=true`,可以减少内存使用,因为只有在需要时才会加载beans。- 禁用不必要的自动配置可以减少启动时间。- 通过使用`@Lazy`注解或在`application.properties`中设置`- 只包含应用程序真正需要的依赖,使用Spring Boot的`- 确保使用的是包含性能改进的兼容且更新的JVM版本。

心猿意码 898

OpenCV实例(二)手势识别

手势识别的范围很广泛,在不同场景下,有不同类型的手势需要识别,例如:● 识别手势所表示的数值。● 识别手势在特定游戏中的含义,如“石头、剪刀、布”等。● 识别手势在游戏中表示的动作,如前进、跳跃、后退等。● 识别特定手势的含义,如表示“OK”的手势、表示胜利的手势等。理论基础凸包和凸缺陷在图像处理中具有非常重要的意义,被广泛地用于图像识别等领域。逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。凸包和逼近多边形很像,只不过凸包是物体最外层的凸多边形。

小幽余生不加糖 9409

风控系统中的架构设计原型图分析与实践探讨

本文探讨了风控系统的架构设计原型图在风险管理中的重要性。通过分析多个案例,文章展示了如何利用架构设计原型图提升团队沟通效率,优化系统结构与功能。强调了良好的架构设计不仅有助于系统的可扩展性和可维护性,还能增强对风险的应对能力。最后,呼吁金融行业持续关注技术进步与市场需求变化,以不断提升风控系统的设计与实施效果。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

Spring Boot 性能优化与监控:利用 Actuator 进行应用监控、日志分析与性能优化

是 Spring Boot 提供的一个功能模块,用于监控和管理 Spring Boot 应用。它为开发者提供了一些生产环境下非常实用的功能,包括健康检查、性能指标、环境信息、日志管理等。Spring Boot Actuator 的核心目标是让应用的运维和监控变得更简单。它通过一组端点(EndPoints)提供了应用的各种运行时信息,开发者可以通过这些端点快速了解应用的健康状况、性能瓶颈、以及系统负载等信息,帮助开发者快速排查问题和进行性能优化。

一碗黄焖鸡三碗米饭的博客 1648

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring Boot 原理与性能优化实战

fill:#333;color:#333;color:#333;fill:none;常见坑总结JSON 时间格式统一大文件上传 OOM 风险数据库连接池泄漏JSON 时间格式spring:jackson:限制上传文件大小数据库连接池配置 HikariCP开发快:自动配置 + Starter部署快:jar 包一键启动生态强:丰富的扩展启动快:延迟加载、限制扫描、禁用无用配置内存稳:合理 JVM 参数、线程池优化接口快:缓存、批量 SQL、异步任务监控全。

波波烤鸭的博客 1075

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring Boot性能优化策略

本文将针对标题《技术总结:Spring Boot性能优化策略》进行深入探讨,总结一系列有效的性能优化策略,帮助开发者提升Spring Boot应用的性能。为了提升Spring Boot应用的性能,需要从配置优化、代码优化、容器配置优化等多个方面入手,同时还需要关注扩展性与稳定性优化等方面。通过合理的性能优化策略,可以有效地提升Spring Boot应用的性能,满足企业的业务需求。(3)关注业务逻辑:关注业务逻辑的处理过程,优化数据流处理和业务规则的处理逻辑,减少无效的计算和不必要的IO操作。

2501_90410679的博客 214

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring Boot Admin性能优化最佳实践

本文深入探讨Spring Boot Admin的性能优化技术,包括JVM调优、内存管理、数据库优化、缓存策略等关键技术点。通过详细的技术解析和实践示例,帮助开发者构建高性能的微服务监控平台。@Component@Override// 自定义性能指标// 这里可以添加特定的性能监控指标/*** 记录方法执行时间*/// 自定义性能指标 // 这里可以添加特定的性能监控指标 } /*** 记录方法执行时间} /*** 记录计数器} }

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 416
上一篇: Spring Boot 性能优化
下一篇: 一步一步理解Java企业级应用的可扩展性
Viking_bird
博客等级 码龄11年 92粉丝 183原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值