`
飘零羽
  • 浏览: 26693 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

JAVA性能优化

    博客分类:
  • java
阅读更多

周围经常有同学纠结于现有的java代码应当怎么优化才能达到更高的性能,当然有些时候这中间也包括我但那是极少数情况,与代码的优化相比也许我更热衷于代码结构的重构。高效但难于理解与思路清晰却效率一般相比也许我更倾向于后者,因为大多数时候良好的设计与清晰的编码几乎总是优于“优化的” 代码,那么我们为什么还要优化代码呢?也可以说什么时候代码才需要我们去优化呢?当我们看到代码的优化对设计有积极的影响或对性能有硬性的要求时我们才真正需要对代码进行优化。

那么我们步入正题,来说一些java代码性能优化的技巧:

1.创建对象不好:也许第一眼看到这条技巧人们会感觉很迷惑JAVA是面向对象的语言,为什么创建对象不好呢?那是因为过多的对象实例,尤其是短期对象会导致不好的性能。大量对象引起的频繁的年轻代垃圾收集会导致程序性能的急剧下降,那么什么叫年轻代呢,年轻代指的是那些小的,生命周期短的对象,而对于年轻代的垃圾收集算法往往都是几乎全部停止的,阻塞一切的。那也就意味着如果对性能要求较高的尽量减少对象的引入,因为那样会导致过多不必要的停顿,从而严重影响到程序的性能。

2.静态好:这一点对于拜读过《Thinking in java》的人们都应该知道其中的原理,如果一个方法能够定义成静态的那么就把它定义成静态的,因为静态方法不是虚的,所以执行的时候不会动态分派,这样能够适当提升程序运行速度除此之外与实例方法相比高级的VM更愿意内联静态方法。这也就使我们最常用的方法在执行时能够达到更高的效率,对于非内联的代码指令指针必须在指针更新之后指向下一条指令以便让处理器知道到什么位置去取得下一个指针,然而对于内联的代码只需在整个代码块执行完毕之后才需要更新指令指针,这也就是内联代码的优势所在。

3.表切换好,查找切换不好:这一点主要影响的是switch语句块,对于switch语句块标签值集中的语句块要比标签值分散的语句块执行效率要高。因为java中的siwtch有两种字节码,一种是tableswitch另一种是lookupswitch对于标签值集中的switch语句块采用tableswitch当去选择相应的标签时我们只需要把一个偏移量传入一个函数表中。然而标签值不集中的switch语句块就要根据标签值到所有的标签中一一查找比较才能找到相应的值:函数对进行执行。两者的效率差显而易见了吧。

4.方法越小越好:对于java程序的执行往往是很小的一部分代码占据了很大的执行之间,这句话的意思也就是说,java中的很多代码需要频繁的执行,那么java为了提高执行效率把一些常用的代码进行缓存,在需要时直接在缓存中读取,然而如果一个方法过大那么它将整个编译占据很大的缓存空间,然而缓存的大小是一定的,那么就使得一些真正常用的代码得不到缓存从而影响执行效率。

5.Exception用于异常:对于一些刚刚接触到java的人来说,往往把Exception当成Error。然而Exception的设计初中并不是表示错误而是异常,是程序的非正常运行环境,是可恢复的,因此在运用Exception时常用于程序在非正常运行环境中的流程控制,这种情况下会提示VM优化正常的路径。也许熟悉java中try/catch语句块的同学会对这一点体会比较深吧,底层的异常往往封装向上抛出到控制层进行捕捉处理然后确定执行的代码路径。

6.小心使用装饰器模式:熟悉设计模式的人们也许会对这个模式不陌生,利用这种模式能够动态的为对象添加职责,在设计的角度看这种模式是相当优秀的,能够解决很多问题,最常见的问题就是java中的io。然而使用装饰器模式的时候间接的额外开销很大,会对性能产生一定的影响。人们在日常中也许经常使用的装饰器往往是给一个对象添加装饰器,从而增加对象的职责,然而装饰器也是能够从一个对象上移除的,移除的方法往往是与异常相结合,在装饰器的方法中抛出一个异常,当异常条件成熟的时候对异常进行捕捉然后对装饰器进行删除,这也算是结合异常对程序的执行进行控制吧。

7.对类进行instanceof操作更快:我记得当初刚接触java的时候,上课老师说过java中使用instanceof不好,因为它不是面向对象的,用了的话代码就不好了,大概就是这么个意思,不过在日后的变成过程中发现有些时候instansof是必不可少的,也没有使代码变坏的味道,不像老师说的那么严重。在应用instanceof的情况一般会有两种,一种是面对继承链的,另一种是面对接口的,对于面向继承链的类型判断后台的操作只需要做一次减法和一个数组查找,也就是相当于一次随机读取,然而对于接口的需要做的却是一次数组搜索,性能差距可想而知。

8.最小程度的使用同步代码快:对于这一点经常编写多线程程序的同学们也许会感触很深,过于庞大的同步代码快会严重阻塞程序的执行,降低程序的执行效率,我们经常的做法是把不涉及临界区域操作的语句移动到同步代码块之外缩小同步代码快的大小,也许我们还有另外的思路,比如volatile的引用具体原理可以参考java内存模型,或者在事物层次进行原子操作的控制。

9.小心外部的库:我们在平时的项目中往往会引用到外部的库,然而有时我们只需要其中的一小部分功能,那么过多这样的引用会导致我们程序不必要的臃肿,那么最好的办法就是对于任务简单,但是关系到程序关键部分的功能不如我们自己去实现从而避免对外部库的依赖,同时又能够根据自身项目的具体情况进行优化。

总之,优化始终第二位的,良好的设计与清晰的代码是第一位的。请记住,优化的第一准则是:不要优化,优化的第二准则(对于专家)同样是不要优化。

分享到:
评论

相关推荐

    4本高清中文版Java性能优化经典书籍

    Java性能优化是IT行业中至关重要的一个领域,尤其是在大型企业级应用和互联网服务中,高效的Java代码能够显著提升系统运行效率,降低服务器资源消耗。以下是对这四本经典书籍中的核心知识点的详细介绍: 1. **...

    java性能优化教程

    Java性能优化是提升软件效率和用户体验的关键环节,尤其是在大规模应用和高并发场景中。本教程将深入探讨如何通过各种技术和策略来优化Java程序,确保其高效运行。 首先,理解Java性能的基础是JVM(Java虚拟机)。...

    大话JAVA性能优化

    《大话JAVA性能优化》这份文档深入探讨了Java程序在多个层面的性能调优策略,旨在帮助开发者提高程序运行效率,降低资源消耗,提升用户体验。以下是对这些知识点的详细阐述: 1. **代码层次优化**:在代码编写阶段...

    Java性能优化实战视频全集

    ### Java性能优化实战知识点概述 #### 一、理论分析篇 **1.1 性能优化的衡量指标及注意事项** - **衡量指标**: 包括响应时间、吞吐量、资源利用率等。 - **注意事项**: 在进行性能优化时,需确保优化方案不会引入...

    Java 性能优化实战 21 讲2021年

    │ 开篇词 Java 性能优化,是进阶高级架构师的炼金石.mp4 │ 02 理论分析:性能优化有章可循,谈谈常用的切入点.mp4 │ 03 深入剖析:哪些资源,容易成为瓶颈?.mp4 │ 04 工具实践:如何获取代码性能数据?....

    大话java性能优化 周明耀 完整版

    《大话java性能优化》是周明耀先生的一本深入探讨Java性能调优的专业书籍,其主要内容涵盖了Java程序设计中的各种性能优化策略和技术。这本书旨在帮助开发者理解和掌握如何提升Java应用的运行效率,减少资源消耗,...

    Java 性能优化 一书源码

    Java性能优化是软件开发中的一个关键领域,尤其是在大型企业级应用和高并发系统中。《Java性能优化》一书深入探讨了如何通过各种技术提升Java应用程序的效率和响应速度。以下是一些基于书籍源码和相关文件名的关键...

    java性能优化java性能优化

    Java性能优化是提升Java应用程序效率的关键技术,涵盖了内存管理、代码优化、I/O处理等多个方面。以下是一些关键的性能优化策略: 1. **对象创建与克隆**:使用`new`关键字创建对象时,会调用构造函数链,这可能...

    Java 性能优化实战 21 讲

    在Java性能优化实战的21讲中,涵盖了Java开发中至关重要的性能调优技术,旨在提升应用程序的效率、稳定性和可扩展性。以下是对这些关键知识点的详细解析: 1. **JVM内存模型**:理解Java虚拟机(JVM)的内存结构是...

    大话Java性能优化.epub

    大话java性能优化,pdf版!

    Java性能优化的45个细节.pdf

    根据提供的文件信息,以下是关于Java性能优化的详细知识点,内容包括单例模式的合理应用、静态变量的使用考量、对象创建与垃圾回收策略、final修饰符与内联优化、局部变量与实例变量的性能差异、包装类型与基本类型...

    10种java性能优化方案.docx

    ### Java性能优化方案详解 #### 一、理解性能优化的重要性 在现代软件开发中,特别是在Java领域,性能优化是一项至关重要的任务。随着系统的复杂性和规模不断增长,优化不仅仅是提高用户体验那么简单,更是确保...

    大话JAVA性能优化.pdf

    大话Java性能优化》主要提供Java性能调优方面的参考建议及经验交流。作者力求做到知识的综合传播,而不是仅仅只针对Java虚拟机调优进行讲解,另外力求每一章节都有实际的案例支撑。具体包括:性能优化策略、程序编写...

    Java性能优化技巧集锦

    Java性能优化是提升软件效率和用户体验的关键步骤,涵盖了多种技术和策略。本文将深入探讨Java通用篇、J2EE篇、GUI篇、EJB篇以及缓存优化等方面的知识点,旨在帮助开发者实现更高效的代码。 一、Java通用篇 在Java...

Global site tag (gtag.js) - Google Analytics