51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2261|回复: 0
打印 上一主题 下一主题

[转贴] 让你月薪飙升的秘籍:Java性能调优的9个实用技巧(上)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-2 11:22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小文0111 于 2019-2-2 11:30 编辑

 现实里可能没有完美无缺的代码。如果有,那么,过来,我写一段代码给你看。

  Java已经成为了编程语言的骄子。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,越来越多的企业在数据结构、算法分析、软件开发等研究设计时,都选择以Java语言作为载体。这说明Java语言已经是人们构建软件系统时主要使用的一种语言。如何让Java程序运行是一回事,而如何让它们跑的快又是另外一回事了......

  

  下面我整理了一些Java性能调优的一些技巧,在此和大家浅浅的交流一下。

  Java性能优化的重要性:

  代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。

  代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。

  代码优化的目标是:

  减小代码的体积

  提高代码运行的效率

  在我们分享基于Java的性能调优技巧之前,让我们先讨论一下这些通用的性能调优技巧。

  通用性能调优的4个实用技巧

  1. 在必要之前,先不要优化

  这可能是最最重要的性能调优技巧之一。你应该遵循常见的最佳实践,并尝试有效地实现你的用例。但这并不意味着在证明它是必要之前,替换任何标准库或构建复杂的优化。

  在大多数情况下,过早的优化占用了大量的时间,使得代码难以读取和维护。更糟糕的是,这些优化通常不会带来任何好处,因为你花费了大量时间来优化应用程序的非关键部分。

  那么,你如何证明你需要优化某些东西呢?

  首先,你需要确定应用程序代码的速度,例如,为所有API调用指定一个最大响应时间,或者指定在特定时间范围内导入的记录数量。完成之后,你可以度量应用程序的哪些部分太慢而需要改进。当这样做之后,那么请继续看第二个调优技巧。

  2. 使用分析器来找到真正的瓶颈

  在你遵循第一条建议,并确定你的应用程序的某些部分的确需要改进之后,问自己从哪里开始?

  你可以用两种方法来解决这个问题:

  你可以看一下你的代码,从看起来可疑或者你觉得它可能会产生问题的部分开始。

  或者使用分析器,获取代码中每个部分的行为和性能的详细信息。

  至于为什么应该总是遵循第二种方法。

  答案应该很明显,基于分析器的方法能让你更好地理解代码的性能含义,并允许你关注最关键的部分。如果你曾经使用过分析器,你将会惊讶于代码的哪些部分造成了性能问题。然而,很多时候,你的第一次猜想会把你引向错误的方向。

  3. 为整个应用程序创建性能测试套件

  这是另一个帮助你避免许多意想不到问题的一般技巧,这些问题通常发生在性能改进部署到生产环境之后。你应该经常定义测试整个应用程序的性能测试套件,并在你完成性能改进之前和之后运行它。

  这些额外的测试运行将帮助你识别更改的功能和性能方面的影响,并确保你不会发布一个弊大于利的更新。如果你的任务运行于应用程序的多个不同部分比如数据库或缓存,这一点尤其重要。

  4. 首先解决最大的瓶颈问题

  在创建了测试套件并使用分析器对应用程序进行分析之后,你就有了一个需要提高性能的问题列表,这很好,但它仍然不能回答你应该从哪里开始的问题。你可以从那些可以快速搞定的开始,亦或者从最重要的问题开始。

  当然前者很诱人,因为这很快就能出结果。有时,可能需要说服其他团队成员或你的管理层,性能分析是值得的。

  但总的来说,我建议首先着手处理最重要的性能问题。这将为你提供最大的性能改进,而且你可能只需要修复这些问题中的几个就可以解决你的性能需求。

  在了解通用性能调优技巧之后,让我们再来仔细看看一些特定于Java的调优技巧。

  Java性能调优的5个技巧

  1. 使用 StringBuilder

  几乎所有Java代码中你都应该考虑这个问题。避免使用+号。你可能会认为StringBuilder只是个语法糖,比如:

  String x = "a" + args.length + "b";

  会编译成

  


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-26 13:24 , Processed in 0.065673 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表