文档章节

Java 编程:如何提高性能?(简单总结篇)

OneAPM蓝海讯通
 OneAPM蓝海讯通
发布于 2016/03/01 12:53
字数 983
阅读 37
收藏 2

开发者在编程中除了要有编程规范,还要注意性能,在 Java 编程中有什么提高性能的好办法呢?

本文转自国内 ITOM 行业领军企业 OneAPM Cloud Insight(一款能够优雅监控多种操作系统、数据库、中间件、云主机的解决方案)美女工程师陈永梅简书

开发者在编程中除了要有编程规范,还要注意性能哦,今天就工作中遇到的一些问题进行了一个简单总结,希望攻城狮来批评指正。

作为一个QA,从质量管理方面得到的认识:

  • 一行代码能解决的问题 尽量不要使用多行,代码行数越多 维护成本越高,出现缺陷的概率也就越多;
  • 一行代码编写可能只需要 30s,发现并优化一行代码产生的性能问题需要 72h,甚至更多。

不说了,下面就简单说下实际编程过程中性能相关的问题吧:

1、循环逻辑中减少创建对象次数

例如:

for(int i = 0;i < list.size; i ++) {
…
}

应替换为:

for(int i = 0,int len = list.size();i < len; i ++) {
…
}

2、关注循环结构是否存在多次访问网络、数据库等操作

原则:能够一次性查询完成的 尽量避免多次查询。

优化前:

优化后:

3、对象容错性差

原则:参数传递过程中不要直接转换使用 JSONObject 这种对象,如果取值不存在该方法会报异常导致程序中止,尽量转为 JavaBean 或 Map;否则应先判断取的值是否存在。最好以 JavaBean 封装接收参数,并对参数进行初步较验,不能将数据完整性交给前端处理。

如果使用 JSONObject 对象,应先进行存在判断if(json.contains(“xxx”))

4、对需要缓存的信息进行合理设计

原则:登录功能要分析哪些是跟用户密切相关的,如 session 信息,哪些是跟业务系统属性相关的,如系统配置资源信息。后者则应当进行缓存处理,避免每次登录都构建获取信息。

5、业务逻辑的执行顺序问题

原则:在进行逻辑判断的过程中,尽量使复杂操作延迟执行,不要提前执行;如登录操作,只有登录成功后才做相关资源加载、查询操作;

如示例:静态资源应尽量后置,建议大家在业务逻辑梳理时先否定再肯定,也就是先列不满足业务的条件。

优化前:

Java 编程:如何提高性能?(简单总结篇)

优化后:

Java 编程:如何提高性能?(简单总结篇)

6、Try…catch 相对消耗性能比较严重,尽量减少使用频率,使用中尽量扩大作用范围,禁止出现在循环等操作中。

7、创建类似数组等可以设定大小的对象,应尽可能指定大小,最大限度减少内存空间的浪费。

8、HashMap 的读取遍历使用 entry,而不是先取 key 集合,再取值。

9、在方法中创建的对象最好在使用完毕后将引用指向 null,利于 GC 垃圾回收。

10、数组复制使用 system.arraycopy(),减少使用创建新数组赋值的方法。

11、方法大小不要超过80行,方法栈太深容易导致内存溢出;尽量不要出现功能太少的类,类的维护也需要性能开销。

12、创建复杂对象应使用clone方法,减少构造方法调用的开销。

13、待续...

Cloud Insight 集监控、管理、计算、协作、可视化于一身的数据管理平台,帮助所有 IT 公司,减少在系统监控上的人力和时间成本投入,让运维工作更加高效、简单。 本文转自 OneAPM 官方博客

© 著作权归作者所有

OneAPM蓝海讯通
粉丝 94
博文 631
码字总数 1266889
作品 0
海淀
私信 提问
Java 8里面lambda的最佳实践

Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事! 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了...

OSC闲人
2015/04/30
10K
41
面向面试编程,面向掘金面试,一入掘金门,方知面试易

一九年已末,二零年将至。 我使用 与 一行简单的命令爬取了掘金的面试集合榜单,有兴趣的同学可以看看爬取过程: 使用 jq 与 sed 制作掘金面试文章排行榜,可以提高你使用命令行的乐趣 关于前...

shanyue
今天
0
0
你必须掌握的 21 个 Java 核心技术!(干货)

点击上方“java进阶架构师”,选择右上角“置顶公众号” 20大进阶架构专题每日送达 51闲来无事,师长一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘复盘。而写这篇文章的目的是想...

Java进阶架构师
05/03
0
0
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
2018/06/21
0
0
论Java程序猿的自我价值提升,BATJ资深架构体系助你飞跃瓶颈区!

Java那句广为人知的口号“一次编写,处处运行”也体现出Java价值的关键所在—强大的Java虚拟机使得Java具有跨平台兼容性。 目前流行的Java职业路径包括后端开发员、大数据开发员,嵌入式系统...

Java填坑之路
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

荣耀笔记本装Win10系统攻略,一文教你快速入门

     荣耀MagicBook科技尝鲜版发布已经有一段时间了,这个预装了Linux版本的笔记本在原来已经极具性价比的基础上又便宜了300元,而荣耀笔记本如何安装Win10系统俨然成为了热门话题。对于...

梅丽莎好
18分钟前
4
0
CentOS7 部署 redis 5.0.6 集群

环境 操作系统: CentOS7.7,关闭 firewalld 和 selinux Redis: 5.0.6 master 实例 10.0.4.110:6371 10.0.4.110:6372 10.0.4.110:6373 slave 实例 10.0.4.111:6371 10.0.4.111:6372 10.0.4.1......

俊赛潘安-才比管乐
52分钟前
28
0
怎么录制电脑上视频素材的声音

随着短视频的不断发展人们越来越喜欢利用空闲时间观看一些短视频用以打发零碎的时间,不少人发现这个机遇也匆匆走上制作短视频的道路,在制作短视频时配音是至关重要的,那你知道怎么在视频素...

cenfeng123
今天
6
0
[springboot 开发单体web shop] 6. 商品分类和轮播广告展示

商品分类&轮播广告 因最近又被困在了OSGI技术POC,更新进度有点慢,希望大家不要怪罪哦。 上节 我们实现了登录之后前端的展示,如: 接着,我们来实现左侧分类栏目的功能。 商品分类|Produc...

IsaacZhang
今天
5
0
java 静态代码块,代码块,构造方法执行顺序

回顾一下java的执行顺序 public class Demo { public Demo() { super(); System.out.println("this is Demo"); } static { System.out.println("this is static"); } { System.out.println("......

漫步行者
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部