性能优化

35 个 Java 代码性能优化总结-----转载到处都有,不知原创是谁

▼魔方 西西 提交于 2020-03-01 15:02:32
35 个 Java 代码性能优化总结 前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。 代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 代码优化细节 1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。 2、尽量重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder

hibernate的性能优化

情到浓时终转凉″ 提交于 2020-03-01 13:37:35
Hibernate是对JDBC的轻量级封装,因此在很多情况下Hibernate的性能比直接使用JDBC存取数据库要低。然而,通过正确的方法和策略,在使用Hibernate的时候还是可以非常接近直接使用JDBC时的效率的,并且,在有些情况下还有可能高于使用JDBC时的执行效率。   在进行Hibernate性能优化时,需要从以下几个方面进行考虑:   数据库设计调整。   HQL优化。   API的正确使用(如根据不同的业务类型选用不同的集合及查询API)。   主配置参数(日志、查询缓存、fetch_size、batch_size等)。   映射文件优化(ID生成策略、二级缓存、延迟加载、关联优化)。   一级缓存的管理。   针对二级缓存,还有许多特有的策略。   事务控制策略。   数据的查询性能往往是影响一个应用系统性能的主要因素。对查询性能的影响会涉及到系统软件开发的各个阶段,例如,良好的设计、正确的查询方法、适当的缓存都有利于系统性能的提升。   系统性能的提升设计到系统中的各个方面,是一个相互平衡的过程,需要在应用的各个阶段都要考虑。并且在开发、运行的过程中要不断地调整和优化才能逐步提升系统的性能。    设计阶段的考虑问题   一个良好的数据库结构有利于系统性能的提升。这里所说的良好结构的数据库并不单纯是指满足数据库设计范式的数据库结构。这是因为

C++ 服务端 性能优化

柔情痞子 提交于 2020-03-01 13:08:23
编写正常运行的程序很容易,但一旦数据量大起来,对代码的性能就需要认真考虑了。对于服务器来说,如果客户端一次访问,就需要话费几百毫秒,那么一旦每秒的访问次数多起来,后续的请求就会造成很明显的延迟。严重影响用户体验。最近做后端服务也遇到了一些需要优化的问题,数据量大了后,有明显延迟。 性能优化的前提是良好的构架设计:如果架构本身的设计就存在问题,在怎么优化也所能提升的空间也是很小。根据二八原则,大部分性能应该消耗在很少的地方,所以优化的关注点就在于那20%最耗时的代码块,解决了这个问题,整体性能就会有很大的提升。 代码层面的优化一般涉及到一下方面: ##1.并发模型的选择 对于不同的功能需要用不同的并发模型,适合单线程还是多线程,以及线程池这些都会影响到性能,对于服务器,模块是io密集型还是计算密集型。例如如果一次请求是需要做很多的计算,那么用线程池是合理的能够简化编程,但是如果一次请求主要时间是等待io,那么线程池是无法提升吞吐量的。 ##2.数据的存储 ###容器的选择 数据对象的存储方式取决于对数据的使用方式,就拿C++容器来说,如果要存储物品信息,一般系统中更多的是根据物品id来获取物品信息,那么久需要用key-value来存取,但map是红黑树,unorder_map是哈希表,哈希表的查询时间是O(1),而对于map,插入、删除都是O(logN),最坏和平均都是。 ##

用 Webgoat 撬动地球,看安全测试的引路石!

孤者浪人 提交于 2020-03-01 03:09:59
测试工程师是很多人迈进软件行业的起点。从负责很小的局部到把握整个产品的质量,每个人花费的时间长短不一——从功能到性能、可用性到容错性、从兼容性到扩展性、稳定性到健壮性……方方面面逐渐做广做深。 不过,大家逐渐发现,质量这条路的上升空间有层天花板,如果仅限于上面列举的内容但不够深入,固守着手工或半自动测试,则很难突破。很多处于这种状态的人会选择转型,去做产品经理、质量管理、配置管理等方向,甚至去做开发工作,以期获得更大的升职加薪空间。其实,测试的所谓出路未必,也绝不止上面种种,例如我在很多论坛上见到的各路性能优化大师们,在性能测试的方向上做得足够精深,是很受青睐和赏识的,收入自然也是丰厚的。而另一个方向,也是我今天要重点介绍的,则是安全测试。 如果说性能是伴随着互联网起步和电商等在线业务的爆发而崛起的刚性需求,那么安全则是在线业务成熟并进化路上欠下的最大债务,亟待解决。每天都有各式各样的网络欺诈、诱骗、盗窃,安全的互联网生活难道不应该成为每个网民的最低需求么?因此,市场决定了安全测试是一片蓝海,大有前途。 相信很多测试工程师和我有过同样的迷茫,想做自动化、想做性能、想做安全……但是入道无门。一方面企业在安全测试方面投入较少,除非进入圈内的企业,否则难以找到学习和积累的机会;另一方面可能是感觉安全测试有一定门槛,身边又没有资深的人给予指点,在繁重的测试工作压力下作罢

MySQL性能优化(一):MySQL架构与核心问题

邮差的信 提交于 2020-02-29 17:33:43
一、前言 作为程序员的你,数据库作为一门必修课,而MySQL数据库毫无疑问已经是最常用的数据库了。系统的稳定、高效、高并发等指标,很大程度上取决于数据库性能是否够优,可见性能优化的重要性,这也就不难理解各位在任何一场面试中都会被问及到数据库调优相关的问题。 因此,这就是我为何考虑写该系列文章的主要原因,希望该系列文章( MySQL性能优化 )能够给你带来收获,让你更系统、更全面的掌握MySQL性能优化的技能、技巧。该系列文章将会持续分享、更新,如果觉得现在或者将来可能对你有用,不妨持续关注、收藏。 在MySQL性能优化之前,你有必要重新再认识下MySQL,便于后续更容易理解MySQL性能优化中涉及到的知识点。本文将从MySQL架构、核心问题来针对性展开讨论,这也将是 MySQL性能优化 系列文章的开篇之作。 二、MySQL逻辑架构 想深入探究MySQL之前,有必要了解一下MySQL的逻辑架构,逻辑架构图如下: MySQL的逻辑架构中,分为三层,如上图红色虚线框的三部分。 最上层架构并不是MySQL所独有的,大多数基于客户端/服务器形态的系统或者服务,都有类似的架构,其中包含MySQL的连接处理、授权认证、安全控制等等。 第二层架构是MySQL中最为核心的部分,其中包括查询解析、分析、优化、缓存以及所有的内置函数(如:日期、时间、函数等),所有跨存储引擎的功能都在这一层实现,例如

SQL SERVER性能优化

北战南征 提交于 2020-02-29 16:47:30
1、 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻 网络 负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;   算法的结构尽量简单;在查询时,不要过多地使用通配符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1;在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因为某些情况下用户是不需要那么多的数据的。不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开销;按照特定顺序提取数据的查找。   2、 避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如: SELECT name FROM employee WHERE salary > 60000   在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型数。我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。   3、

何崚谈阿里巴巴前端性能优化最佳实践

末鹿安然 提交于 2020-02-29 15:14:57
大家好,我现在在阿里巴巴园区采访阿里巴巴中文站架构师,兼B2B网站优化领域的负责人何崚。何崚你好,请简单介绍一下你自己。 我叫何崚,2006年加入阿里巴巴。之前一直在中科院下属的两个基因方面的研究所,从事一些基因方面的研究。加入阿里巴巴对我来说是一次转行。我在加入阿里巴巴以后,主要是负责中文站的一些架构设计。 我们知道何崚是阿里巴巴B2B网站优化领域的负责人。首先关于页面前端优化这部分,请谈一谈你的主要经验以及针对一些难点问题的解决方案。 目前我们网站页面前端优化主要有两个方向。第一个方向是对网站核心页面基于Wise load的原则做定点性能优化,这方面无外乎就是减少HTTP请求,减少DNS请求时间,减少页面DOM的数量,做一些图片压缩等,大家的思路基本是一样的。值得一提的是,针对特定方向前端优化,阿里巴巴社区开发了一些自动化性能调优工具,例如刚才提到的减少HTTP请求的问题我们开发了一个自动合并CSS和JS静态文件的框架,对于刚才提到的减少页面DOM数这方面我们也有一个前端延迟加载框架,主要负责在页面加载时只加载首屏,用户滚动页面时才去加载二屏或三屏,这样对于网站的性能包括流量都是很大的提升和节约。 我们知道Web I/O也是一个优化很重要的方面,有没有需要特别注意的或是有哪些好的解决方案? Web I/O在我们网站高并发的应用场景下会有明显的瓶颈。为了提高网站高并发处理能力

SQL SERVER性能优化SQL

此生再无相见时 提交于 2020-02-29 14:46:49
原文: SQL SERVER性能优化SQL sql server 性能优化方法 目录 一、查看是否有死锁 二、查看当前正在执行的sql语句 三、查询前 10 个可能是性能最差的 SQL 语句 四、查询逻辑读取最高的sql 五、 查询索引碎片 六、修改索引填充因子(FILLFACTOR:填充因子,ONLINE:ON 重建索引时表仍然可以正常使用) 七、查询未使用过的索引 八、查询表下索引使用情况 九、查询表结构信息 一、查看是否有死锁 dECLARE @tab TABLE(NAME varchar(100),value varchar(200)); INSERT INTO @tab EXEC('DBCC OPENTRAN WITH TABLERESULTS'); SELECT name,CAST(value AS DATETIME) startDate,getdate() currentDate ,DATEDIFF(s,CAST(value AS DATETIME),getdate()) diffsecond FROM @tab WHERE name in ('OLDACT_STARTTIME') SELECT spid, blocked, DB_NAME(sp.dbid) AS DBName, program_name, waitresource, lastwaittype, sp

MYSQL 索引 性能优化

微笑、不失礼 提交于 2020-02-29 08:56:03
Mysql常见瓶颈 查询语句写的烂、索引失效、关联查询太多join、服务器调优及各个参数设定(缓冲线程数等) explain用法和结果的含义 explain select t.id,t.loan_order_no,t.loan_amt,t.success_time as loan_success_time from t_ssj_loan_order t where t.state=1 and t.success_time < '2019-07-16' and t.success_time > '2019-07-14' AND t.loan_status =2 and not EXISTS (select 1 from t_ssj_repay_order r where r.state=1 and t.loan_order_no = r.loan_order_no and r.repay_status=2 and r.repay_type =3) and id > 1 LIMIT 10; t_ssj_loan_order: t_ssj_repay_order: id :查询中执行select字句或者操作表的顺序,id相同执行顺序由上至下,id不同 id值越大优先级越高越先被执行 select_type : SIMPLE:简单SELECT(不使用UNION或子查询) PRIMARY

浅谈linux性能调优之二十:模块管理与内核编译

雨燕双飞 提交于 2020-02-29 02:08:19
模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。总之,模块是一个为内核(从某种意义上来说,内核也是一个模块)或其他内核模块提供使用功能的代码块.在linux下安装过驱动的管理员因该知道,下载好驱动程序,编译完成后,最后会执行modprobe modulename,从而加载此模块,支持对应的设别。 可以使用命令lsmod查看系统已经加载的模块: Module Size Used by 模块名 模块大小 被使用的次数,被啥使用 nls_utf8 1389 2 ipt_REJECT 2349 2 nf_conntrack_ipv4 9440 2 nf_defrag_ipv4 1449 1 nf_conntrack_ipv4 iptable_filter 2759 1 ip_tables 17733 1 iptable_filter ip6t_REJECT 4562 2 nf_conntrack_ipv6 19655 2 xt_state 1458 4 nf_conntrack 79643 3 nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state ip6table