性能优化

44个Java性能优化

泪湿孤枕 提交于 2019-12-02 22:58:23
44个Java性能优化 首先,代码优化的目标是: 减小代码的体积 提高代码运行效率 代码优化细节 1 .尽量指定类、方法的final修饰符 ​ 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。 2. 尽量使用对象 ​ 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。 3.尽可能使用局部变量 ​ 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 4.及时关闭流 ​ Java编程过程中,进行数据库连接、I/O流操作时务必小心

前端性能优化-减少http请求,dns预解析,减少repaint和reflow

匿名 (未验证) 提交于 2019-12-02 22:56:40
前端性能优化方法: 一 . 减少http请求 (2)lazyload懒加载,在需要的时候再加载   1.定义:懒加载也称为延迟加载,图片需要用到的时候再去价值   2.用法:就是重写对象的get方法,当系统调用get方法再去加载对象   3.优点:(1)对象的实例化在getter方法中,各司其职,降低耦合性;(2)真正需要资源时,再去加载,系统的内存占用率会减小 (3)压缩/合并css和js 二 .减少repaint重绘和reflow重排 (1)repaint重绘: 元素的外观被改变,但没有改变布局(宽高)的情况下发生,如改变visibility,outline,背景色等 如何减少:   1. 尽量少用style属性,用class重绘比重排的效率高   2. 有动画效果的元素设置绝对定位和固定定位   3. 权衡速度的平滑。比如实现一个动画,以1个像素为单位移动这样最平滑,但reflow就会过于频繁,CPU很快就会被完全占用。如果以3个像素为单位移动就会好很多。   4. 减少不必要的dom层级,不要频繁操作dom 三 . dns预解析 让具有此属性的域名不需要用户点击链接就在后台解析,而域名解析和内容载入使串行的网络操作,这个操作能减少用户的等待时间,提升用户体验 用法:放在meta标签后面<link rel="dns-prefetch" href="//www.zhix.net

前端性能优化策略

匿名 (未验证) 提交于 2019-12-02 22:56:40
1、减少 HTTP 资源请求次数   合并静态资源图片、JavaScript 或 CSS 代码,减少页面请求数和资源请求消耗   避免重复的资源,防止增加多余请求   减少没必要的图片、JavaScript、CSS 及 HTML 代码   对文件进行压缩优化   使用 gzip 等方式压缩传输文件 3、将 CSS 或 JavaScript 放到外部文件中,避免使用 <style> 或 <script> 标签直接引入   在 HTML 文件中引用外部资源可以有效利用浏览器的静态资源缓存 4、避免页面中空的 href 和 src   当 <link> 标签的 href 属性为空,或 <script> 、 <img> 、 <iframe> 标签的 src 属性为空时,浏览器在渲染的过程中仍会将 href 属性或 src 属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其他资源的下载进程 , 而且最终加载到的内容是无效的,因此要尽量避免   为 HTMl 内容设置 CaChe-Control 或 Expires 可以将 HTML 内容缓存起来,避免频繁向服务器端发送请求。 <meta http-equiv= " Cache-Control " content= " max-age=7200 " /> <meta http-equiv= " Expires " content= "

前端性能优化

邮差的信 提交于 2019-12-02 22:41:11
客户端优化 静态资源优化 使用构建工具对HTML,CSS,JS压缩,删除生成环境下的无用的代码 提取公共资源,减少代码体积 外链CSS和JS文件,外链的文件可以放到CDN,服务器和浏览器会进行缓存 使用雪碧图(CSS雪碧 即 CSS Sprite ,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背景图像合并到一张图片上,然后利用css的背景定位来显示需要显示的图片部分),减少http请求次数 使用字体图标 图片使用webp格式(由 谷歌 于2010年推出的新一代 图片格式 ,在压缩方面比当前 JPEG格式 更优越。在质量相同的情况下,WebP格式图像的体积要比JPEG格式图像小40%) 网络请求优化 使用get请求,get请求会缓存请求,比起post,只发送一个tcp包(传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议),效率更好。 合并请求数量,减少http请求次数,节约网络请求时间 减少DNS请求所耗费的时间.且不说对错,因为从基本来说,减少http请求数的确可以减少DNS请求和解析耗费的时间. 减少服务器压力.这个通常是被考虑最多的,因为每个http请求都会耗费服务器资源,特别是一些需要计算合并等操作的服务器,耗费服务器的 cp u资源可不是开玩笑的事情,硬盘可以用钱买来

.NET性能优化小技巧

匿名 (未验证) 提交于 2019-12-02 22:06:11
Intro 之前做了短信发送速度的提升,在大师的指导下,发送短信的速度有了极大的提升,学到了一些提升 .NET 性能的一些小技巧 关于使用 HttpClient ,大概很多人都知道尽量使用单例以提升 HttpClient 的性能。 由于 HttpClient 在发送请求时需要进行域名解析,使用的时候第一次一般来说会慢一些,我们在 HttpClient 初始化完成之后,向目标地址发送一个 HEAD 请求,这样会把域名解析结果有一个缓存,实际去请求的时候所需用的域名解析的时间就会减少了,这样就可以提升第一次实际发送请求的速度。 HttpClient 的超时时间设置尽可能短以避免超长等待提升响应时间 原来的同步操作,可以改为异步处理的使用异步方法处理, 如查询数据库等操作大多可以改为异步操作,减少线程阻塞,进一步提高 CPU 的利用率。 多个任务的调度,可以不需要关心一个任务调度的话就可以同时启动任务而且无需等待。 在使用较多的 Model 处考虑 Model 中是否有较多的无用字段,如果有可以考虑用一个新的轻量级的 Model ,优化 Model 数据结构优化内存存储。 重复使用的值缓存起来(根据数据需要选择使用缓存类型,变量缓存或内存缓存或redis等分布式缓存),减少数据库查询次数 如果需要同时插入许多数据,尽可能使用 BulkCopy 操作以提升性能 更新/查询条件优化

性能优化之MySQL(Structured Query Languag)

匿名 (未验证) 提交于 2019-12-02 22:06:11
首先mysql结构图 : ODBC。    Management Serveices & Utilities:系统管理和控制工具集合,例如备份还原,安全复制等功能。    Connection Pool:连接池,用于管理缓冲用户连接,线程处理等需要缓存的需求。 from就是调用SQL Interface。    Parser:解析器,用于SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和 YACC实现的,是一个很长的脚本。    Optimizer:查询优化器,用于SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的 是“选取-投影-联接”策略进行查询。    Cache和Buffer:查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中 取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存 等。    Engine:存储引擎,存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色 的一个地方。Mysql的存储引擎是插件式的。它根据MySql提供的文件访问层的一个抽象接口来 定制一种文件访问机制(这种访问机制就叫存储引擎)。现在有很多种存储引擎,各个存储引擎的 优势各不一样,最常用的MyISAM,InnoDB,BDB SQL执行顺序: MyISAM,InnoDB区别: 一

mysql性能优化

匿名 (未验证) 提交于 2019-12-02 22:06:11
数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情 1.为查询缓存优化你的查询 mysql > show variables like ' %query_cache% ' ; (query_cache_type 为 ON 表示已经开启) + -- ----------------------------+----------+ | Variable_name | Value | + -- ----------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 20971520 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | + -- ----------------------------+----------+ 如果不是ON,修改配置文件以开启查询缓存: > vi / etc / my.cnf [ mysqld ] 中添加: query_cache

优化不易,且写且珍惜

匿名 (未验证) 提交于 2019-12-02 21:53:32
本文要感谢我职级评定过程中的一位评委,他建议把之前所做的各种性能优化的案例和方案加以提炼、总结,以文档的形式沉淀下来,并在内部进行分享。力求达到如下效果: 1. 形成可实践、可借鉴、可参考的各种性能优化的方案以及选型考虑点,同时配合具体的真实案例,其他人遇到相似问题时,不用从零开始。 2. 有助于开阔视野,除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识、思维以及做各种权衡的能力。 文章在内部分享后,引起强烈分享,得到了不少同事和朋友的认可和好评,觉得对日常的工作有很好的指导作用。考虑到这些经验可能对业界同行也有帮助,所以在博客公开分享给大家。 常见性能优化策略分类 代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如for循环次数过多、作了很多无谓的条件判断、相同逻辑重复多次等。 数据库 数据库的调优,总的来说分为以下三部分: SQL调优 这是最常用、每一个技术人员都应该掌握基本的SQL调优手段(包括方法、工具、辅助系统等)。这里以MySQL为例,最常见的方式是

推荐:Java性能优化系列集锦

匿名 (未验证) 提交于 2019-12-02 21:53:32
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难。随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了。现代JVM持续演进,内建了更为成熟的优化技术、运行时技术和垃圾收集器。与此同时,底层的硬件平台和操作系统也在演化。 目录: 一、Java性能优化系列之一--设计优化 二、Java性能优化系列之二--程序优化 三、Java性能优化系列之三--并发程序设计详解 四、Java性能优化系列之四--Java内存管理与垃圾回收机制详解 五、Java性能优化系列之五--JavaIO 现代大规模关键性系统中的Java性能调优,是一项富有挑战的任务。你需要关注各种问题,包括算法结构、内存分配模式以及磁盘和文件I/O的使用方式。性能调优最困难的通常是找到问题所在,即便是经验丰富的人也会被他们的直觉所误导。性能杀手总是隐藏在最意想不到的地方。 这一次,我将在本文中着重介绍Java性能优化的一系列举措,希望能够对现在的你有所帮助。觉得有帮助的朋友也可以转发、收藏一下。 一、Java性能优化系列之一--设计优化 1、善于利用 Java 中的设计模式:享元模式、代理模式、装饰器模式等。详见我的博客文章“大话”设计模式 文章链接: https://blog.csdn.net/person_limit/article/details

java性能优化之HashMap,LinkedHashMap,TreeMap读取大量数据效率的比较

匿名 (未验证) 提交于 2019-12-02 21:52:03
很多时候,我们用jdbctemplate或mybatis的时候,为了查询通用,会选择使用map数据结构,因为hashmap本身无序,所以为了保证key的有序性,会采用linkedhashmap。所以我们要看一下Linkedhashmap的性能影响多大。如下: @Test public void test() { Integer count =1000000; Random random =new Random(); Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < count; i++) { map.put(i+"", i+""); } long time1 = System.currentTimeMillis(); for (int i = 0; i < count; i++) { map.get((random.nextInt(count)+1)+""); } long time2 = System.currentTimeMillis(); System.out.println("HashMap time:" + (time2 - time1)); ////////////////////////////////////////////////////////////////