`

JVM性能优化 Part V:Java的伸缩性

阅读更多

JVM性能优化 Part V:Java的伸缩性

        很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。

        主流的硬件服务器提供了大量的内存

        分布式系统有大量内存的需求,而且该需求在持续增长

       一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务器的内存管理能力以及一个分布式应用程序的内存需求量。这被称之为Java内存墙,如下图所示(图中表述Java应用服务器和常规Java应用的内存使用量的演变史)

 

Java内存墙(1980~2010)   (图片来源:Azul Systems)

Java内存墙(1980~2010)   (图片来源:Azul Systems)

 

这给我们带来了如下JVM性能课题:

1)    如果分配给应用程序的内存太小,将导致内存不足。JVM 不能及时释放内存空间给应用程序,最终将引发内存不足,或者JVM完全关闭。所以你必须提供更多的内存给应用程序。

2)    如果给对响应时间敏感的应用增加内存,如果不重启你的系统或者优化你的应用,Java堆最终会碎片化。当碎片发生时,可能会导致应用中断100毫秒~100秒,这取决与你的Java应用,Java堆的大小以及其他的JVM调优参数。

 

        关于停顿的讨论大部分都集中在平均停顿或者目标停顿,很少涉及到堆压缩时的最坏停顿时间,在生产环境中堆中每千兆字节的有效数据的都将会发生大约1秒的停顿。

2~4秒的停顿对大多数企业应用来说都是不能接受的,所以尽管实际的Java应用实例可能需要更多的内存空间,但实际只分配2~4GB的内存。在一些64位系统中带有很多关于伸缩性的JVM调优项,使得这些系统可以运行16GB乃至20GB的堆空间,并能满足典型响应时间的SLA。但是这些离现实较远,JVM目前的技术无法在进行堆压缩时避免停顿应用程序。Java应用开发人员苦于处理这两个为我们大多数人所抱怨的任务。

架构/建模在大量的实例池之上,随之而来的是复杂的监控和管理操作。

反复的JVM和应用程序调优以避免“stop the world“引起的停顿。大多数程序员希望停顿不要发生在系统峰值负载期间。我称之为不可能的目标。

 

现在让我们深入一点Java的可伸缩性问题。

 

过度供给或过度实例化Java部署

        为了充分利用内存资源,普通的做法是将Java应用部署在多个应用服务器实例上而不是一个或者少数应用服务器实例上。当一台Server上运行16个应用服务器实例可以充分利用所有的内存资源,但如此无法解决的是多实例的监控以及管理所带来的成本,尤其是当你的应用部署在多个Server上。

       另一个问题来了,峰值负载时的内存资源不是每天都需要的,这样就形成了巨大的浪费。有些情况下,一台物理机上可能只不是不超过3个“大应用服务器实例,这样的部署更加不够经济也不够环保,尤其在非峰值负载期间。

        让我们来比较一下这两种部署架构,下图中左边是多而小的应用服务器实例部署模式,右边是少而大的应用服务器实例部署模式。两种模式处理同样的负载,究竟哪一种部署架构更具经济性。

大应用服务器部署场景 (图片来源:Azul Systems)大应用服务器部署场景 (图片来源:Azul Systems)

 

        如我之前说过的,并发压缩使得大应用服务器部署模式变得可行,而且可以突破JVM可伸缩性的限制。目前只有AzulZing JVM可以提供并发压缩的技术,另外ZingServer侧的JVM,我们很乐意看到越来越多的开发者在JVM层面去挑战Java可伸缩性的问题。

        由于性能调优仍然是我们解决Java可伸缩性问题的主要手段,我们先来看有哪些主要的调优参数以及通过它们能达到什么样的效果。

 

调优参数:一些事例

        最著名的调优参数莫过于”-Xmx”了,通过该参数可以指定Java的堆空间大小,实际上可能不同的JVM执行结果不太一样。

        有的JVM包含了内部结构(如编译器线程,垃圾回收器结构,代码缓存等等)所需要的内存在“-Xmx”的设定中,而有的则不包含。因此用户Java进程的大小不一定跟“-Xmx”的设定相吻合。

        如果你的应用程序分配对象的速率,对象的生命周期,或者对象的大小超过了JVM内存相关配置,一旦达到最大可使用内存的阈值将会发生内存溢出,用户进程则会停止。

        当你的应用程序纠结于内存的可用性时,最有效的方法就是通过”-Xmx”指定更大的内存去重启当前应用进程。为了避免频繁的重启,大多数企业生产环境都倾向于指定峰值负载时所需要的内存,造成过度配置优化。

        提示:生产环境负载的调整

        Java开发人员易犯的常见错误是在实验下的做的堆内存设置,在移植到生产环境是忘记重新调整。生产环境和实验室环境是不一样的,谨记根据生产环境的负载重新调整堆内存设置。

 

分代垃圾回收器调优

        还有一些其他的优化选项”-Xns””-XX: NewSize”,用来调整年轻代的大小,用来指定堆中专门负责新对象分配的空间大小。

        大多数开发者都试图基于实验室环境调整年轻代的大小,这意味着在生产负载下存在失败的风险。一般 新生代的大小设置为堆大小的三分之一至二分之一左右,但这不是一个准则,毕竟实际还要视应用程序逻辑而定。因此最好先调查清楚年轻代到年老代的蜕变率以及 年老代对象的大小,在此基础上(确保年老代的大小,年老代过小会频繁促发GC导致内存溢出错误)尽可能地调大年轻代的空间。

        还有一个与年轻代相关的调优项”-XX:SurvivorRatio”,该选项用来指定年轻代中对象的生命周期,超过指定时长相关对象将被移至年老代。为了正确地设定该值,你需要知道年轻代空间回收的频率,能够估算到新对象在应用程序进程中被引用的时长,同时也取决于分配率。

 

并发垃圾回收调优

        针对对停顿敏感的应用,建议使用并发垃圾回收,虽然并行的办法能够带来非常好的吞吐量基准测试分数,但是并行GC不利于缩短响应时间。并发 GC 是目前唯一有效的实现一致性和最少“stop the world”中断的方法。不同的JVM提供不同的并发GC的设定,Oracle JVM(hotspot)提供”-XX:+UseConcMarkSweepGC”,今后G1将成为Oracle JVM默认的并发垃圾回收器。

 

性能调优并不是真正的解决办法

         或许你已经注意到上文中在讨论如何“正确地设定调优此参数时,我刻意在正确二字上加了双引号。那是因为就我个人经验而言一旦涉及到性能参数调优,就没有严格意义上的正确设定。每一个设定值都是针对特定的场景。考虑到应用场景会发生变化,JVM 性能调整充其量是一个权宜之计。

         以堆的设置为例:如果2GB的堆可以应对20万并发用户,但是可能不能应付40万的并发用户。

        我们再以”-XX:SurvivorRatio”为例:当设定符合一个负载持续增长最高至每毫秒10000个交易的场景,当压力到达每毫秒50000个交易时又会发生什么呢?

        大多数企业级应用负载都是动态的,Java语言的动态内存管理以及动态编译等技术使得Java更加适合企业级应用。我们来看看一下两个配置清单。

 

清单1. 应用程序(1)的启动选项

>java -Xmx12g -XX:MaxPermSize=64M -XX:PermSize=32M -XX:MaxNewSize=2g
-XX:NewSize=1g -XX:SurvivorRatio=16 -XX:+UseParNewGC
-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=0
-XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSParallelRemarkEnabled
-XX:+UseCMSInitiatingOccupancyOnly -XX:ParallelGCThreads=12
-XX:LargePageSizeInBytes=256m …

 

清单2. 应用程序(2)的启动选项

>java --Xms8g --Xmx8g --Xmn2g -XX:PermSize=64M -XX:MaxPermSize=256M
-XX:-OmitStackTraceInFastThrow -XX:SurvivorRatio=2 -XX:-UseAdaptiveSizePolicy -XX:+UseConcMarkSweepGC
-XX:+CMSConcurrentMTEnabled -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelSurvivorRemarkEnabled
-XX:CMSMaxAbortablePrecleanTime=10000 -XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=63 -XX:+UseParNewGC --Xnoclassgc …

 

           两者的配置区别很大,因为他们是两个不同应用程序。感觉根据各自的应用特设都做了正确的配置与调优。在实验室环境下都运行良好,但在生产环境中最终会表现出疲态。清单1由于没有考虑到动态负载,到了生产环境即表现不良。清单2没有考虑到应用程序在生产环境中的特性变化。这两种情况应该归咎于开发团队,但是该归咎于何处呢?

 

变通办法可行吗?

          有些企业通过精确测量交易对象的大小定义极致的对象回收空间并精简其架构来适配该空间。这也许是办法来削减碎片以应对一整天的交易(在不做堆压缩的情况下)。还有一个办法就是通过程序设计确保对象被引用的时间在一个比较短的时间内从而阻止其在SurvivorRatio时间之后不被迁往年老代而直接被回收,避免内存压缩的场景。这两种办法都可以,但是对应用开发人员和设计人员有一定的挑战。

 

谁保障应用程序的性能?

          一个门户应用可能会在其活动负载峰值点出现故障;一个交易应用可能会在每次市场下跌和上升时无法正常运行;电子商务网站可能会无法应对节假日购物高峰期。这些都是真实世界的案例基本都是JVM性能参数调优导致的。当产生了经济损失,开发团队就会受到责备。也许某些场合下开发团队应该要受到责备,但是JVM的提供商又应该负起什么样儿的责任呢?

         首先JVM提供商应该要提供调优参数的优先顺序,至少这在短期内还是很有意义的。有一些新的调优选项是针对特定的、 新兴的企业应用程序场景。更多的调优选项是为了减轻JVM支持团队的工作负荷而将性能优化转嫁到应用开发者身上。但我个人认为这或将导致更加漫长的支持负荷,一些针对最糟糕场景的调优选项也将被延期,当然不是无限延期。

        毋庸置疑JVM的开发团队也在努力地进行着他们的工作,同时也只有应用实施者才会更加清楚他们应用的特定需求。但是应用的实施者或开发者是无法预测期动态的负载需求。在过去,JVM提供商也会去分析关于Java的性能与可扩展性问题,哪些是他们能够解决的。不是提供调优参数,而是直接去优化或创新垃圾回收的算法。更有趣是我们可以想象一下如果OpenJDK的社区聚集在一起重新考虑Java垃圾回收器将会发生什么!

 

JVM性能的基准测试

          调优参数有时被JVM提供商作为其竞争的工具,因为不同的调优可以改善他们的JVM在可预见的环境中的性能表现,本系列的最后一片文章中将调查这些基准测试来衡量JVM的性能。

 

JVM开发者的挑战

           真正的企业级可伸缩性需求是要求JVM能够适应动态灵活的应用负载。这是在特定吞吐量和响应时间内保证持续稳定性能的关键。这是JVM开发者才能完成历史使命,因此是时候号召我们Java开发者社区来迎接真正的Java可伸缩性的挑战。

 

  •  持续调优

            对于给定的应用,在一开始需要告知其需要多大的内存,之后的工作都应该有JVM来负责 ,JVM需要适配动态的应用负载和运行场景。

 

  • JVM实例数 vs. 实例的可扩展性

             现在的服务器都支持很大的内存,那么为什么JVM实例不能有效地利用它呢?将应用拆分部署许多小的应用服务器实例上,这从经济和环保角度都是一种浪费。现代的JVM需要跟上硬件和应用的发展潮流。

  • 真实世界的性能和可伸缩性

           企业不需要为其应用的性能需求去做极致的性能调优。JVM提供商和OpenJDK社区需要去解决Java可伸缩性的核心问题以及消除“stop the world“的操作。

 

 

结论

           如果JVM做了这样的工作,并且提供了并发压缩的垃圾回收算法,JVM也不再成为Java可伸缩性的限制因素,Java应用开发者不需要花费痛苦的时间理解怎样配置JVM去获得最佳性能,从而将会有更多的有趣的Java应用层面的创新,而不是无休止的JVM调优。我要挑战JVM开发人员以及提供商所需要做的事情来相应甲骨文所提倡的“Make the Java Future“的活动。

 

原文链接: Javaworld 翻译: ImportNew.com - ImportNew读者
译文链接: http://www.importnew.com/6246.html

 

 

分享到:
评论

相关推荐

    Java程序员面试必备知识点总结

    内容概要:本文涵盖了一系列重要的Java基础知识与进阶概念的面试问题及其详细解答,其中包括JVM的工作原理,垃圾回收的实施细节,多线程的解决方案,以及诸如单例设计模式、异常处理和线程安全集合等实际应用中的编程技巧介绍。 适合人群:旨在为准备面试或希望提高Java编程技能的专业人士提供有用指南,无论是对于初级程序员还是资深开发者都有所帮助。 使用场景及目标:适用于Java学习阶段,帮助理解和记忆相关的关键术语和复杂理论;作为快速查阅资料的宝典应对技术评估或职业机会考察。 阅读注意点:强烈建议在研读解答的同时,进行相应的编程实验和实操练习,以便于深化对每个专题的理解和巩固知识点的应用能力。

    一个基于健身的社交App,内含跑步轨迹绘制,数据可视化展示,即时通讯,看新闻等模块(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    基于java的考研指导平台设计与实现.docx

    基于java的考研指导平台设计与实现.docx

    asp网上办公管理系统设计(源代码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Aurora情绪树洞是面向大学生为其提供心理健康辅助和情绪宣泄的网站。(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    Springboot+Vue实现批量文件上传(pdf、word、excel)并支持在线预览功能(毕设&课设&实训&大作业&竞赛&

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    基于java的家政服务中介网设计与实现.docx

    基于java的家政服务中介网设计与实现.docx

    运动页,一个基于社交的体育类APP.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    【带视频教程】任务地推分销推广拉新系统-任务分销神器

    推地推拉新任务分销系统源码是一款任务拉新悬赏系统,可用于地推任务拉新和任务分销, 会员管理,分销设置,订单管理,财务管理,文章资讯管理。它的运行环境为PHP+MySQL+TP。

    学校大创竞赛管理系统,学生上报项目内容,学院、教务处、评审专家评审。(毕设&课设&实训&大作业&竞赛&项目)

    学校大创竞赛管理系统,学生上报项目内容,学院、教务处、评审专家评审。SpringBoot、SpringCloud、SpringSecurity、redis、Mysql、swagger、fastdfs、maven、vue、webpack.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    Python是一种高级的、动态类型的编程语言.docx

    Python是一种高级的、动态类型的编程语言,其设计注重代码的可读性和简洁性。以下是对Python的详细介绍: 一、基本概述 中文名:Python 创始人:吉多·范罗苏姆(Guido van Rossum) 首次发布时间:1991年(Python 0.9.0) 主要版本:Python 2.0(2000年发布)、Python 3.0(2008年发布,为主要修订版) 语言特性:解释型、高级、通用编程语言 二、主要特点 简单易学:Python的语法简洁明了,易于理解和学习。其设计哲学强调代码的可读性和简洁的语法,使得编程变得更加直观和简单。 面向对象:Python既支持面向过程的编程也支持面向对象的编程。在面向对象的语言中,程序是由数据和功能组合而成的对象构建起的,这有助于提高代码的可重用性和可维护性。 可移植性:Python是开源的,因此已经被移植在许多平台上,包括Linux、Windows、macOS等。这使得Python程序可以在不同的操作系统上运行,提高了开发的便利性和灵活性。 解释性:Python是一种解释型语言,编写的程序不需要编译成二进制代码,而是可以直接从源代码执行。Pyt

    asp图书管理系统设计与实现(源代码+论文+开题报告+答辩PPT).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    基于java的课程智能组卷系统设计与实现.docx

    基于java的课程智能组卷系统设计与实现.docx

    基于java的农产品网上销售系统设计与实现.docx

    基于java的农产品网上销售系统设计与实现.docx

    基于SpringBoot仿天猫购物系统.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    java毕业设计源码ssm853宏苑社区图书借阅系统的设计与实现+vue程序数据库含论文.rar

    前端采用的Vue框架,后端采用java语言,ssm框架,mybatis操作数据源,使用软件:idea,eclipse、MySQL。完成了用户登录管理等模块的设计与实现。完成了系统数据库的设计,并基于MySQL数据库管理系统 本系统基于SSM(Spring+SpringMVC+MyBatis)框架,适用于毕业设计, 基于B/S模式, mysql数据库,感兴趣的朋友们可以下载研究一下。 jdk版本:jdk1.8+ 前端:vue.js+ElementUI 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架支持:ssm 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:java+ssm+vue+MYSQL+MAVEN

    基于Koopman算子的凸公式来解决数据驱动的最优控制问题matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于java的家用电器销售网站设计与实现.docx

    基于java的家用电器销售网站设计与实现.docx

    基于java的临大机械学院毕业设计管理系统设计与实现.docx

    基于java的临大机械学院毕业设计管理系统设计与实现.docx

    java基于ssm+vue网上房屋中介管理系统源码 带毕业论文

    【资源说明】 1、开发环境:ssm框架;内含Mysql数据库;VUE技术 2、项目代码都经过严格调试,代码没有任何bug!下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。

Global site tag (gtag.js) - Google Analytics