java一般方法有哪些方法有哪些方法_Java代码优化有哪些方法?

Java代码优化是Java编程开发很重要的一个步骤,Java代码优化要注重细节优化,一个两个的细节的优化,产生的效果不大,但是如果处处都能注意代码优化,对代码减少体积、提高代码运行效率是有巨大帮助的,还能在一定程度上避免未知错误,常用的Java代码优化细节如下:

1. 为类、方法指定final修饰符

为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写,如果指定了一个类为final,则该类所有的方法都是final的,Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,能够使性能平均提高50%。

2. 尽量重用对象

由于Java虚拟机不仅要花时间生成对象,还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。

3. 尽可能使用局部变量

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快,其他变量都在堆中创建,速度较慢,且栈中创建的变量,随着方法的运行结束,内容就没了,不要额外的垃圾回收。

4. 及时关闭流

Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源,因为对这些大对象的操作会造成系统大的开销,稍有不慎,将会导致严重的后果。

5. 尽量减少对变量的重复计算

在方法调用中,即使方法只有一句语句,也是有消耗的,因此,在进行方法调用时尽可以减少对变量的重复定义和引用。

6. 尽量采用懒加载的策略,即在需要的时候才创建

7. 慎用异常

异常对性能不利,因为只要有异常被抛出,Java虚拟机就必须调整调用堆栈,异常只能用于错误处理,不应该用来控制程序流程。

8. 不要在循环中使用try…catch…,应该把其放在最外层

9. 如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度

10. 当复制大量数据时,使用System.arraycopy()命令

11. 乘法和除法使用移位操作

用移位操作可以极大地提高性能,因为在计算机底层,对位的操作是最方便、最快的。

12. 循环内不要不断创建对象引用

13. 基于效率和类型检查的考虑,应该尽可能使用array,无法确定数组大小时才使用ArrayList。

14.

尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销

15. 不要将数组声明为public static final

因为这毫无意义,这样只是定义了引用为static

final,数组的内容还是可以随意改变的,将数组声明为public更是一个安全漏洞,这意味着这个数组可以被外部类所改变。

16. 尽量在合适的场合使用单例

在控制资源的使用、控制实例的产生以及控制数据的共享的场合下,可以使用单例以减轻加载的负担、缩短加载的时间以及提高加载的效率等。

17. 尽量避免随意使用静态变量

18. 及时清除不再需要的会话

19. 实现RandomAccess接口的集合比如ArrayList,应当使用最普通的for循环而不是foreach循环来遍历

20. 使用同步代码块替代同步方法

除非能确定一整个方法都需要进行同步,否则尽量使用同步代码块,避免对那些不需要进行同步的代码也进行了同步,影响代码执行效率。

21. 将常量声明为static final,并以大写命名

22. 不要创建一些不使用的对象,不要导入一些不使用的类

23. 程序运行过程中避免使用反射

反射具有强大的功能,但效率不高,不建议在程序运行过程中频繁使用反射机制,如果确实需要使用,建议将那些需要通过反射加载的类和项目启动的时候通过反射实例化一个对象并放入内存

24. 使用数据库连接池和线程池

这两个池都是用于重用对象的,前者可以避免频繁地打开和关闭连接,后者可以避免频繁地创建和销毁线程。

25. 使用带缓冲的输入输出流进行IO操作

26. 顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList

27. 不要让public方法中有太多的形参

28. 字符串变量和字符串常量equals的时候将字符串常量写在前面

29. 在java中if (i == 1)和if (1 == i)是没有区别的,但从阅读习惯上讲,建议使用前者

30. 不要对数组使用toString()方法

31. 不要对超出范围的基本数据类型做向下强制转型

32. 公用的集合类中不使用的数据一定要及时remove掉

33. 把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+”"最慢

34. 使用最有效率的方式去遍历Map

35. 对资源的close()建议分开操作

36. 对于ThreadLocal使用前或者使用后一定要先remove

37. 切记以常量定义的方式替代魔鬼数字,魔鬼数字的存在将极大地降低代码可读性,字符串常量是否使用常量定义可以视情况而定

38. long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字1混淆,这个点非常细节,值得注意

39. 所有重写的方法必须保留@Override注解

40. 推荐使用JDK7中新引入的Objects工具类来进行对象的equals比较,直接a.equals(b),有空指针异常的风险

41. 循环体内不要使用”+”进行字符串拼接,而直接使用StringBuilder不断append

42. 不捕获Java类库中定义的继承自RuntimeException的运行时异常类

43. 避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed

导致的性能下降,JDK7之后,可以使用ThreadLocalRandom来获取随机数

44. 静态类、单例类、工厂类将它们的构造函数置为private

以上是常用的Java代码优化方法,在Java代码书写的时候要养成代码优化的习惯,就能够写出体积小、运行效率高、出错率低的代码!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facebook 中国程序员之死

全世界只有3.14 % 的人关注了青少年数学之旅9 月 19 日,一位 Facebook 软件工程师从加州门洛帕克(Menlo Park)总部四楼纵身跳下,结束年轻的生命。Facebook 新闻发言人证实确有其事,并说公司将会联系员工家人。门洛帕克…

HTTP头信息

通常 HTTP 消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP 的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域…

[导入]数据库物理模型设计的其他模式之继承模式

连载之7原创:胖子刘(转载请注明作者和出处,谢谢)数据库物理模型设计的其他模式除了上面提到的四种主要设计模式,还有一些其他模式,在某些项目中可能会用到,在这里先简单做个说明,暂不…

最近ゲームにはまってる。

小D的[今日口语]栏目里今天教的一句话正好表达了我最近的状态最近(さいきん)ゲームにはまってる(最近我很迷游戏)这个“迷”字用得很对感觉自己现在还是孩子状态会沉溺于一种东西而无法自拔周末的时候一般都是游戏完累了才有心情去…

dialog element 删掉标题_ElementUI 销毁Dialog数据(简单粗暴)

在使用element开发通过之中使用Dialog弹窗创建数据或者数据回显在经常不过了。而且数据创建和数据编辑正常都是使用同一组件。出现的问题:title"提示弹窗":visible.sync"dialogVisible"width"30%"destroy-on-close>使用dialog 提供…

一个简单的方式搞定密码的加盐哈希与验证

过去一段时间来, 众多的网站遭遇用户密码数据库泄露事件。层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家 “暴库”,全部遭殃。单向加密一个简单的方案是将明文密码做单向哈希后存储。单向哈希算法…

“我数学太烂,但高考136分!”刷完上万道题后,我找到2个月多考58分的捷径…...

全世界只有3.14 %的人关注了青少年数学之旅01难上天的高考试卷,我逆袭考到136分!我叫刘辉,来自湖北省的某个县城,今年我数学考到了136分的好成绩,成功被一所985高校录取。↓我的高考成绩↓但回想一年之前,我…

php吞了throw错误,PHP 异常与错误处理

异常处理:意外,是在程序运行过程中发生的意料之外的事,使用异常改变脚本正常流程。try{}catch(异常对象){}如果try中代码没问题,则执行完try中代码后就到catch后执行如果try中代码有异常发生,则抛出一个异常对象&#…

[Forward] 因为火炬,所以迟到,工资照扣

今天跟往常一样,到香蜜湖等230 看到深南大道主道那边站了一名JC叔叔 在前面的主辅岔道口看到有交J叔叔...对面又大堵车...心想大事不妙..又要交通管制了......两hui期间因为交通管制让我第一个月上班就来了一次迟到 这时候是8点钟多一点开始管制.....很后悔没有上到最后一…

三分钟总览微软任务并行库TPL

点击上方蓝字进行关注有小伙伴问我每天忽悠的TPL是什么?☹️ 这次站位高一点,严肃讲一讲。引言俗话说,不想开飞机的程序员不是一名好爸爸;作为微软技术栈的老鸟,一直将代码整洁之道奉为经典, 优秀的程序员将…

第五章 MyEclipse配置hadoop开发环境

1.首先要下载相应的hadoop版本的插件,我这里就给2个例子: hadoop-1.2.1插件:http://download.csdn.net/download/hanyongan300/6238153 hadoop2.2.0插件:http://blog.csdn.net/twlkyao/article/details/17334693 上一章我也讲了怎…

这才是真正的,坐上来,自己动!| 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅你有见过加辣的奶茶吗?什么叫做科技改变生活其实你的猫一直都看不起你坐上来,自己动!安全带使用体验当iPhone遇上数学在B站UP主的剪刀下诞生了各种神奇的CP组合其中最受欢迎的居然是伏地魔和林黛玉…

九项路考(2)

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />二、侧方位停车<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" />要点&#xff1a;1、倒车入停车位&#xff08;1&#xff09;挂倒档&#xf…

Sql Server2005对t-sql的增强之Cross Apply

Sql Server2005对t-sql的增强之Cross ApplyCross Apply使表可以和表值函数结果进行join&#xff0c;在下面的示例中建了两个表和一个表值函数&#xff0c;T_b的列a_ids中会存放a表的id用,分割的字符串连接&#xff1b;我们通过cross apply使T_a&#xff0c;T_b表通过splitIDs i…

360导航源码php,51zxw 仿360网址导航源码

1.上传网站安装程序到空间&#xff0c;空间需支持PHP&#xff0c;MYSQL数据库20M 即可。2.访问网网址执行安装&#xff0c;按照提示填入mysql数据库信息。3.安装时默认设置后台管理 用户&#xff1a;admin 密码&#xff1a;123456 (以防安装出错建议默认安装&#xff0c;然后登…

SRM 440(1-250pt, 1-500pt)

DIV1 250pt 题意&#xff1a;小球从一段折线斜坡上滚下来&#xff0c;告诉所用时间&#xff0c;求重力加速度。 解法&#xff1a;二分答案模拟即可。 tag:二分&#xff0c;simulation 1 // BEGIN CUT HERE2 /*3 * Author: plum rain4 * score :5 */6 /*7 8 */9 // END CUT…

技术 Leader 怎样带跨一个团队?

网上很多分析大公司&#xff0c;小公司的文章&#xff0c;都会提到在大公司工作就是螺丝钉&#xff0c;岗位分的非常细&#xff0c;每个人把自己的专职工作做好就行&#xff1b;而在小公司需要每个人都是多面手&#xff0c;一岗多职。这种观点我同意一半&#xff0c;在小公司中…

我怀疑全国最会吹牛的人,都在这8个公众号上了

全世界只有3.14 % 的人关注了青少年数学之旅学习如逆水行舟&#xff0c;不进则退&#xff1b;只有坚持不断的学习,才能保持进步。今天给大家精心挑选的这几个优质的公众号&#xff0c;在行业深耕已久&#xff0c;相信大家一定会有所收获&#xff0c;感兴趣的可以关注一下。Pyth…

信息化之路------广州行

刚刚参加完SAP在广州举办的“红海战略的成功之路”的主题演讲&#xff0c;同时也给SAP在广州的合作伙伴做了一次培训&#xff0c;在这次广州行的过程中&#xff0c;深深地感觉到“企业信息化广州还行”&#xff01; 这次广州之行体会颇深&#xff0c;主要有以下几点&#xff1a…

CSS hack:区分IE6 IE7 Firefox

区别不同浏览器&#xff0c;CSS hack写法&#xff1a;区别IE6与FF&#xff1a;background:orange;*background:blue;区别IE6与IE7&#xff1a;background:green !important;background:blue;区别IE7与FF&#xff1a;background:orange; *background:green;区别FF&#xff0c;IE…