
Java性能调优
文章平均质量分 90
本专栏将介绍Java应用程序的优化方法,分别从设计模式、JVM虚拟机、代码层面、架构设计等多方面结合实用样例技巧帮助学员理解理论知识,快速掌握优化技巧
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
架构师速成记
从业10年,专注于数据治理、架构设计、以及生活导向的自媒体探索者;全网程序员粉丝10万+
展开
-
Java性能优化:架构设计-分布式架构设计
分布式架构设计一、前言随着微服务的流行,“分布式架构”作为高频词时常出现在开发者面前,我们是否理解分布式架构?它和微服务有什么区别呢?这一小节我们将讲解微服务和分布式架构那些事。二、概念1、分布式: 将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。上面:service A、B、C、D 分别是业务组件,通过API Geteway进行业务访问。(注:分布式需要做好事务管理)..原创 2020-09-05 17:20:58 · 2152 阅读 · 9 评论 -
Java性能优化:架构设计-分库分表设计
分库分表设计一、前言美团外卖,每天都是几千万的订单,淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。事实上MySQL单表可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW量级是最佳状态,因为这时它的BTREE索引树高在3~5之间。那如何解决这一问题呢?分库分表中间件有哪些以及各自的优缺点等,本小节将简单介绍下。二、问题答疑2.1、为什么要分库分表?如前言中的例子,公司业务发展越好,用户就越多,数据量越大,请求量越大,.原创 2020-09-05 17:17:14 · 1064 阅读 · 1 评论 -
Java性能优化:架构设计-搜索引擎设计
搜索引擎设计一、前言所谓搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出信息反馈给用户的一门检索技术。搜索引擎应用场景在全文检索、加快检索效率方面应用广泛,而本小节主要介绍我们工作中用的比较多的两个中间件Solr和ElasticSearch二、搜索引擎组件介绍2.1 常用场景项目开发中,遇到全文检索和加快检索效率业务场景,经常会选用Solr或ES(ElasticSearch)组件来解决,那我们来简单了解下相关设计全文搜索:一般网络用户适用于全文搜索引擎。这种.原创 2020-09-05 17:13:49 · 852 阅读 · 0 评论 -
Java性能优化:架构设计-缓存常见问题汇总
缓存常见问题汇总系统在高并发、高性能场景下正常运行,此时架构设计中缓存技术是起着至关重要的作用。缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力。缓存架构设计不当,可能导致了系统崩溃。本下节将从缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等概念的讲解到缓存应用介绍下缓存那些事。一、常见的缓存中间件谈到缓存,当下常用的组件有redis、memcache、EhCache、mongodb等,缓存的使用主要解决以下几类问题第一,加快用.原创 2020-09-05 17:09:34 · 727 阅读 · 0 评论 -
Java性能优化:架构设计-流量控制设计
一、前言随着用户量日益增多,当达到一定峰值时,数以万计的流量来临,项目即时响应和顺利运行至关重要,如何设计架构才能够抗住这千万级的流量?架构设计的时候需要哪些"原则"?本章将从架构各个组件设计来剖析软件设计那些事。二、常用的架构设计"原则"我们经常听到项目需要支持高并发、高可用、自动扩容等词这些也是开发过程需要根据项目场景以及未来发展趋势首先考虑的。那这些设计原则可从不同的维度进行归纳总结,如下1.高并发:**服务拆分:**将整个项目拆分成多个子项目或者模块,分而治之,将项目进..原创 2020-09-05 17:05:21 · 883 阅读 · 1 评论 -
Java性能优化:案例实践
一、前言之前章节对JVM性能的监控和调优都有所介绍,本小节将汇总Web应用程序开发和部署过程中经常遇到的业务场景,结合工作实战案例从数据压缩、内容缓存、会话持久、静态文件分发等多维度探索Web应用调优。二、Web应用案例汇总Web应用涉及的优化方面非常多,以下将从多个维度介绍Web应用优化的注意事项2.1前后端分离在前后端不分离架构中,所有的静态资源和业务代码统一部署在同一台服务器上。服务器接收到浏览器的请求后,进行处理得到数据,然后将数据填充到静态页面中,最终返回给浏览器。实...原创 2020-09-05 17:00:29 · 928 阅读 · 0 评论 -
Java性能优化:数据传输优化
数据传输优化一、前言客户端与服务端经常进行着频繁的数据传输,数据传输又影响着用户体验,本小节就传输速率的优化,整理了部分注意事项。二、数据传输优化2.1 减少数据字节数:在开始的时候,采用的是xml传输,这就要使用到Serializable/Parcelable序列化以及反序列化,其传输速度之慢,基本已经被遗弃,后来又出现了JSON序列化传输,其常用工具就是GSON和fastjson,但随着时代的进步,json也体现出了局限性json的局限性主要体现在其是基于字符串的传输,在原创 2020-09-05 16:58:16 · 1442 阅读 · 0 评论 -
6.1Java性能优化:数据交换技术简介
数据交换技术简介一、前言数据交换共享在企业系统交互时应用广泛,本小节将介绍数据交换的常用方式、XML和JSON两种数据交换格式的特点,在数据交换过程中根据各自特点合理选择对应技术栈。二、数据交换方式异构数据交换指异构数据处理环境下不同数据源的互操作。随着企业之间联系日趋紧密,业务系统不断增加,不同系统之间的信息交流日益增多,异构数据交换技术的应用在企业中也非常的广泛,常用的交换技术可以汇总如下:2.1电子数据交换(EDI)方式:EDI通过统一的格式来交换企业信息,企业通过专用的数据网络来交换数据,原创 2020-09-05 16:47:18 · 744 阅读 · 0 评论 -
5.8样例讲解(下)
样例讲解(下)一、前言承接上小节,我们将从Web应用运行的现状和调优过程继续进行样例的讲解,通过初步调优,可通过测试工具JMeter测试系统的指标提升(如吞吐量、响应时间、并发量等)二、调优前web应用运行状况上小节我们简单了解了Tomcat的调优参数,可通过简单参数设置提升系统性能。这小节我们用SpringBoot的一个项目deme为例,测试下项目性能指标。将应用程序通过java -jar…不设置任何JVM参数的情况启动,并启动JMeter,对Tomcat进行压力测试JMeter参数设置:原创 2020-09-05 14:59:21 · 523 阅读 · 0 评论 -
5.7样例讲解(上)
实战JVM调优一、前言本小节会将结合案例,较为系统的介绍JVM调优的过程,本模块共涉及以下内容,将用两小节实战剖析整个流程:Tomcat服务器基本状况和调优方法JMeter的使用方法(性能测试工具)Web应用程序调优过程和思路二、Tomcat简介和调优Tomcat是一个免费开源的Web应用服务器,应用很广泛的Servlet容器之一,官网下载安装后下图(8.0为例)bin目录主要是用来存放该目录下存放二进制的可执行文件。这些文件主要有两大类,一类是以.sh结尾的(linux命令),另原创 2020-09-05 14:53:29 · 605 阅读 · 0 评论 -
5.6JVM性能调优方法简介
JVM性能调优方法简介一、前言为了提升系统的性能,开发人员可以从系统的各个角度和层次对系统进行优化。除了开篇讲到的代码层面优化外,在软件架构上、JVM虚拟机层、数据库以及操作系统层面都可以通过各种方法进行调优,从而在整体上提升系统的性能。那本小计结将着重讲解下JVM虚拟机层面调优的一些方法。二、JVM调优介绍Java软件运行在JVM虚拟机上,软件开发后期对JVM调优一定程度提升了Java程序性能。作为Java软件的运行平台,JVM的各项参数将会直接影响Java程序的性能,如JVM的堆大小、垃圾回收原创 2020-09-05 14:49:02 · 685 阅读 · 0 评论 -
5.5JVM性能监控常用方法
JVM性能监控一、前言本小节会介绍JVM性能监控,掌握几种常用的监控工具辅助我们更好的了解JVM的性能状态。生产环境中监控JVM性能,分析监控数据,可以知道何时需要JVM调优,可见监控是非常重要的。JVM的监控范围包括垃圾收集、JIT编译以及类加载。那其中具体都包含哪些?如何监控呢?我们开始探索下吧二、垃圾收集监控JVM的垃圾收集非常的重要,因为它对应用的吞吐量和延迟有着深刻的影响。重要的垃圾收集数据包括:当前使用的垃圾收集器Java堆的大小新生代和老年代的大小永久代的大小Minor原创 2020-09-05 14:46:47 · 683 阅读 · 0 评论 -
5.4JVM垃圾收集机制
JVM垃圾收集机制一、前言上小节我们了解了常见的垃圾收集器,本小节将从内存回收、常用垃圾算法、常见面试题等维度拓展垃圾收集机制知识为什么学这些(来自刚接触者的疑惑):我们仅知道GC垃圾收集器,那何时回收内存、回收哪些内存、垃圾回收算法有哪些等等…这些问题对于想深入探索的小伙伴是不是很有“吸引力”,因为可以让我们更好的理解JVM工作原理好了,我们开始正文知识的探索吧!二、正文2.1 内存回收JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。垃圾收集器所需关注主要原创 2020-09-05 14:39:16 · 534 阅读 · 0 评论 -
5.3HotSpot VM 的垃圾收集器
HotSpot VM 垃圾收集器一、前言垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。二、HotSpot VM介绍JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图(A)图中展示了7种不同分代的收集器: Serial、ParNew、Parallel Scavenge、Serial Old、Parallel原创 2020-09-05 14:36:50 · 581 阅读 · 0 评论 -
5.2JVM生命周期以及类加载
JVM生命周期以及类加载一、前言上小节我们对HotSpot VM做了下介绍,有了初步认识。本节介绍HotSpot VM运行时环境,让我们更好地理解运行时环境在VM中的职责和角色,也有助于了解VM运行时提供了哪些服务,在某些情况下我们只需要调节VM运行时环境的选项参数就能显著改善Java应用性能。如下图所示:VM运行时环境包含命令行选项解析、VM生命周期、类加载、字节码解释器、异常处理、同步、线程管理…本下节主要介绍下VM生命周期和类加载。二、VM生命周期谈VM生命周期不由想到人的整个过程1.原创 2020-09-05 14:26:55 · 607 阅读 · 0 评论 -
5.1HotSpot VM 介绍
HotSpot VM 介绍一、前言对于多数开发者Java虚拟机(JVM)是个**“黑盒”**,不去过多关注它的基本架构、内存管理机制以及优化方案。因为目前来讲JVM有了很多改进,Java应用的性能基本都能达到性能要求,开发者更多精力放在业务方面。但是若要提高整个项目的性能,就需要对JVM有个基本认识。本章将围绕JVM相关知识进行讲解:如JVM内存模结构内存分配相关的参数垃圾回收器的种类以及使用方法JVM调优实例讲解…说这么多,有的小伙伴觉得"鸭梨山大"了,刚从前两章“渡劫”升迁,所以原创 2020-09-05 14:25:19 · 2390 阅读 · 0 评论 -
4.3问题总结和答疑
问题总结和答疑一个人怎样才能认识自己呢?决不是通过思考,而是通过实践。——德国剧作家、诗人、思想家歌德一、开篇前两章我们从设计模式和并发设计两方面介绍了优化方案,本小节我们汇总学习过程中遇到的问题,及时总结交流,如果您对这方面有疑惑,可以留言进行交流,好了,我们先总结下常见问题。二、问题汇总1.设计模式的学习是否必须?需要掌握到什么程度?小伙伴在工作之初就开始接触设计模式,随着工作年限增多,设计模式掌握越发重要,汇总一句:如果我们想成为一个高级软件工程师或者架构师那么设计模式学习以及掌握是原创 2020-09-05 14:23:51 · 628 阅读 · 0 评论 -
4.2并发常用技术点汇总
并发常用技术点汇总开篇前上篇对多线程设计模式做了简单讲解,本篇我们将从:JDK多任务执行框架、JDK并发数据结构、JDK并发控制方法、锁的性能和优化、无锁的并行计算、协程等6方面汇总并发编程技术点,让小伙伴学习有个总体脉络。学习小提示:并发编程在某些高并发场景下能显著提升程序性能,本章带大家了解下并发编程方面的知识,但本小节涵盖知识点比较多,学习过程中遇到不明白知识点要及时讨论汇总。一、JDK多任务执行框架为了给并行程序开发提供更好的支持,Java提供了Thread类、Runnable接口原创 2020-09-05 14:12:30 · 823 阅读 · 0 评论 -
4.1并发应用场景
并发应用场景思索:两个工人在砌一堵墙.有人过来问:“你们在干什么?”第一个没好气地说“没看见吗?砌墙!”第二个人笑了笑说:“我们在盖一幢高楼.”这个故事不新鲜了,小伙伴基本都听过,其实编码常被比喻成“搬砖”,和上面例子也有类似之处。枯燥的重复编码工作让我们提升受限,如何让传统重复的CRUD工作“量变产生质变”,提高代码质量,高性能运行服务整个系统?通过上章节的设计模式以及本章并发编程学习,都是从软件代码层面讲解编程需要简洁、高效、设计合理。学以致用、温故知新,希望小伙伴能够应用到项目实战当中。并原创 2020-09-05 14:07:26 · 1795 阅读 · 0 评论 -
3.4 在合适的场景选择合适的设计模式(下)
在合适的场景选择合适的设计模式(下)一、前言行为模式:关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责,共11种模式。本小节会结合案例简单介绍行为型模式(11种):Chain of Responsibility ( 责任链模式 ) 、Command ( 命令模式 ) 、Command ( 命令模式 ) 、Interpreter ( 解释器模式 ) 、Iterator ( 迭代器模式 ) 、Mediator ( 中介者模式 ) 、Memento ( 备忘录模式原创 2020-09-05 10:19:18 · 551 阅读 · 0 评论 -
3.3 在合适的场景选择合适的设计模式(中)
在合适的场景选择合适的设计模式(中)一、前言设计模式大体上分为三大类创建型模式、结构型模式、行为型模式。本小节会结合案例简单介绍结构型模式(7种)中比较重要的几种:Adapter ( 适配器模式 ) ,Bridge ( 桥接模式 ) ,Composite ( 组合模式 ) ,Decorator ( 装饰模式 ) ,Facade ( 外观模式 ) ,Flyweight ( 享元模式 ) ,Proxy ( 代理模式 ) 。学习过程是艰难的,但是每坚持迈一步,我们都在进步二、结构型模式结构型模式原创 2020-09-05 10:11:50 · 720 阅读 · 0 评论 -
3.2 在合适的场景选择合适的设计模式(上)
在合适的场景选择合适的设计模式(上)一 、前言上个小节中我们讲到 JAVA 中的设计模式大体上分为三类:创建型模式、结构型模式、行为型模式。这个小节我会带着大家结合案例简单介绍下工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式这 5 种创建型模式下的设计模式以及在什么样的情况下要运用这些设计模式。设计模式是对设计原则的具体化。用江湖话说就是武林秘籍,总结出来的一些固定套路,可以帮助有根基的程序员迅速打通任督二脉,从此做什么都特别快。下面我们就一起来看看吧:二、创建型模式介绍2.1 单例原创 2020-09-05 10:07:28 · 797 阅读 · 1 评论 -
性能优化:简明扼要设计模式
简明扼要设计模式一、简介设计模式是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标软件编程过程中根据场景选择合适的设计模式可以产出更好的产品,而不当的设计则会影响原创 2020-08-08 13:14:49 · 511 阅读 · 0 评论 -
Java性能调优:问题总结和答疑
问题总结和答疑一、开篇这篇文章以问答的方式归纳了一些关于性能优化的常见问题,希望有助于理解性能优化技能点为后续章节学习做好铺垫。如果你对这方面有什么疑惑,本篇文章可以给你一个粗略的答案,也可下方留言,共同讨论。二、问题汇总1.性能优化需要学习多长时间才能熟练掌握?学完该专栏能达到什么水平?举个例子:刚毕业大学生报名培训机构之前最关心的问题是:培训多长时间(一般4个月),能达到什么样的水平,培训完能找到工作吗?同理该专栏学习周期很短,会让小伙伴有个整体优化思想,出现性能问题知道从哪方面着手优化,原创 2020-07-18 10:23:09 · 584 阅读 · 0 评论 -
Java性能优化:不容忽视的性能优化小技巧(下)
Java性能优化的常见细节(下)一、前言承接上一小节,我们将继续细节优化总结,这小节我们列下其分类注意事项。学习建议:对每个小细节优化方案建议“深挖剖析”原理,这样可加深印象二、正文总结我们在整理下其它常见优化样例,如下所示2.1 数据类型1.尽量使用基本数据类型代替对象String str = "hello";上面这种方式会创建一个“hello”字符串,而且JVM的字符缓存池还会缓存这个字符串;String str = new String("hello");此时程序除创建原创 2020-07-18 10:21:17 · 484 阅读 · 0 评论 -
Java性能调优:不容忽视的性能优化小技巧(上)
Java性能优化的常见细节(上)一、开篇前上小节我们接触了一些简单的Demo优化样例,合理的优化程序会让我们的项目性能更高运行速度更快。 Java编程中需要注意细节众多,稍不留神就会"采坑",所以我们编码过程需要细心并时刻总结。之后两小节我们将会收集整理编程常见细节优化小技巧,样例不多,但是需要我们养成关注细节的态度。二、正文样例本篇将从Java程序方面汇总下常见细节问题:如线程问题、数据类型、设计模式、变量使用、对象创建、修饰符、异常使用等维度进行讲解。2.1线程问题:1.慎用synchr原创 2020-07-18 10:19:30 · 482 阅读 · 0 评论 -
Java性能调优:写一个更快的 Hello World
写一个更快的Hello world一 、前言第一章我们介绍了性能优化理论、常用优化方案以及相关性能指标等知识,第二章我们会结合比较容易入门的一些小demo开启我们性能优化之路。二、性能调优模块概览如何测试、分析和优化 Java 程序的性能是目前 Java 程序员最关心的技能,但要掌握这个技能,必须要深入到 Java虚拟机甚至操作系统层面的知识和实践经验,掌握一些监控 Java 程序的性能工具,了解一些性能优化方法等,从而快速的找到程序中的性能瓶颈,并有效改善程序的性能。性能调优最困难的是找出问题原创 2020-07-18 10:16:50 · 551 阅读 · 0 评论 -
Java性能优化小技巧
Java 性能优化小技巧对软件系统进行优化,首先要明确软件的性能目标,清楚地指出优化的对象和目的。之后在借助软件进行测试,看是否达到相关目标,若没有达到则查找出当前的性能瓶颈。本小节将讲解调优分析步骤以及常见的优化方案,该小节的学习可辅助我们快速定位性能瓶颈,用合适方案解决系统性能问题。一、调优分析性能调优的步骤主要有:衡量系统现状、设定调优目标、寻找性能瓶颈、性能调优,验证是否达到调优目标。我们主要关注调优步骤中的 寻找性能瓶颈 和 性能调整(优化) 两个关键的阶段阶段,主要思路见下图: 寻找性原创 2020-07-15 23:51:04 · 580 阅读 · 0 评论 -
各种性能指标解读化指标
各种性能指标解读性能调优可以从 硬件(计算机体系机构)、操作系统(OS\JVM)、文件系统、网络通信、数据库系统、中间件、应用程序本身等方面入手。那性能优化有哪些可以参考的指标呢?其实这些指标我们在开篇的时候就已经概述过了,这节课会带着大家一一来解读这些指标。一、性能优化指标下面我们详细解读下以下各个性能指标。执行时间:一段代码从开始运行到运行结束所使用的时间。CPU时间:(算法)函数或者线程占用CPU的时间。内存分配:程序在运行时占用的内存空间。吞吐量:单位时间内系统处理的客户端请原创 2020-07-15 23:49:07 · 779 阅读 · 0 评论 -
你需要了解的性能优化理论知识
你需要了解的性能优化理论知识好的开始是成功的一半,好的习惯是成功的开端。从这个小节开始就踏上了性能优化的征程,是不是有点“激动”呢!这个小节我会给大家介绍下性能调优的两个重要理论。(有点偏理论,之后篇章会结合项目实践案例分析)同学们曾经有没有这样想过:卧槽我写的程序为什么那么慢?它为什么卡住不运行了?它们在做什么?程序哪个阶段用时比较长?如果你曾经写得代码遇见过这样的问题,说明你的代码很可能出现了性能方面问题。但是你肯定也这样想过:算了算了,不管了,反正功能已经实现了考虑什么性能,真的是浪费时原创 2020-07-15 23:46:09 · 760 阅读 · 0 评论 -
开篇:性能问题的现状
性能问题的现状性能优化?是不是感觉这个词很高大上?刚工作2、3年的程序员甚至觉得学此技能有点早?真的是这样吗?“互联网寒冬季”来的那么措手不及,致使初级工程师面试都会被问及程序性能优化、JVM调优、架构优化等优化方案,此时该技能若不了解一二,被 pass 的几率就…(此处省略了“杯具”)好了,言归正传,程序员系统学习性能优化还是至关重要的,如果项目上线时间充足,必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升,对于个人提升也是很有帮助。说起来性能优化,那么程原创 2020-07-15 23:44:09 · 392 阅读 · 0 评论 -
Java性能调优:课程大纲
专栏主题本专栏将介绍Java应用程序的优化方法,分别从设计模式、JVM虚拟机、代码层面、架构设计等多方面结合实用样例技巧帮助学员理解理论知识,快速掌握优化技巧适用人群A 有技术语法基础,缺少完整项目开发经验,为找工作增加经验而学习B 工作1-2年的开发者C 工作2-5年开发者D 5年以上高级开发者课程规划章节规划 编号 章 节 预估字数 详细说明 1 性能优化概念-普及版 开篇前导论-性能问题的现状 性能的概述以及..原创 2020-07-15 23:38:30 · 839 阅读 · 0 评论