可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。
在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,比如正确地、巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能。下面我们就来具体地分析一下这方面的问题。
1、 尽量指定类的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50% 。
2、 尽量重用对象。特别是String 对象的使用中,出现字符串连接情况时应用StringBuffer 代替。由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程序的性能带来很大的影响。
3、 尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。
4、 不要重复初始化变量 默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成0.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。
5、 在JAVA + ORACLE 的应用系统开发中,java中内嵌的SQL语句尽量使用大写的形式,以减轻ORACLE解析器的解析负担。
6、 Java 编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,即使关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,会导致严重的后果。
7、 由于JVM的有其自身的GC机制,不需要程序开发者的过多考虑,从一定程度上减轻了开发者负担,但同时也遗漏了隐患,过分的创建对象会消耗系统的大量内存,严重时会导致内存泄露,因此,保证过期对象的及时回收具有重要意义。JVM回收垃圾的条件是:对象不在被引用;然而,JVM的GC并非十分的机智,即使对象满足了垃圾回收的条件也不一定会被立即回收。所以,建议我们在对象使用完毕,应手动置成null。
8、 在使用同步机制时,应尽量使用方法同步代替代码块同步。
9、 尽量减少对变量的重复计算
例如:for(int i = 0;i < list.size; i ++) {
…
}
应替换为:
for(int i = 0,int len = list.size();i < len; i ++) {
…
}
10、尽量采用lazy loading 的策略,即在需要的时候才开始创建。
例如: String str = “aaa”;
if(i == 1) {
list.add(str);
}
应替换为:
if(i == 1) {
String str = “aaa”;
list.add(str);
}
11、慎用异常
异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。
12、不要在循环中使用:
Try {
} catch() {
}
应把其放置在最外层。
13、StringBuffer 的使用:
StringBuffer表示了可变的、可写的字符串。
有三个构造方法 :
StringBuffer (); //默认分配16个字符的空间
StringBuffer (int size); //分配size个字符的空间
StringBuffer (String str); //分配16个字符+str.length()个字符空间
你可以通过StringBuffer的构造函数来设定它的初始化容量,这样可以明显地提升性能。这里提到的构造函数是StringBuffer(int length),length参数表示当前的StringBuffer能保持的字符数量。你也可以使用ensureCapacity(int minimumcapacity)方法在StringBuffer对象创建之后设置它的容量。首先我们看看StringBuffer的缺省行为,然后再找出一条更好的提升性能的途径。
StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候,因为没有设置初始化字符长度,StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大
分享到:
相关推荐
JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码
提高Java数据库访问效率的策略研究,主要聚焦于如何通过优化JDBC连接来提高数据库访问的性能。 JDBC主要包含两个层面的接口,第一层是驱动程序层,用于处理与具体驱动程序版本的所有通信;第二层是应用程序层,提供...
通过以上策略,开发者可以逐步提升Java应用程序的运行效率,降低资源消耗,确保程序在高负载环境下也能稳定高效地运行。在实际开发过程中,应结合具体情况灵活应用,不断迭代优化,以实现最佳的性能效果。
Java 数组链表效率对比 Java 中的数组和链表是两种常用的数据结构,它们都可以用来存储和操作数据。然而,在实际开发中,选择合适的数据结构和遍历方式对程序的性能和效率有着非常重要的影响。下面我们将对 Java 中...
提高开发效率之tomcat免重启(随意更改java代码)提高开发效率之tomcat免重启(随意更改java代码)提高开发效率之tomcat免重启(随意更改java代码)提高开发效率之tomcat免重启(随意更改java代码)
Java 开发 List 提高效率 Java 开发中,List 是一个常用的数据结构,经常需要将 List 转换为逗号分隔的字符串,以便于数据的存储和传输。提高 List 转换效率是 Java 开发中非常重要的一方面,本文将讨论如何将 List...
如何提高 Java 实训效率 摘要:提高 Java 实训效率是职业教育中的一项重要挑战。随着高职院校办学理念的不断完善,实验实训的投入力度也不断加大。然而,实验实训又面临着新的问题:如何利用这些优良资源,使学生...
提高 Java 代码效率的方法概述 Java 语言作为一门高效的编程语言,在实际应用中需要考虑到代码的效率问题。提高代码效率是每个 Java 开发者都需要关心的问题。本文将讨论如何提高 Java 代码的效率,总结了 13 条...
JAVA设计模式提高反射效率,Java代码精粹,高手实现,高效java代码,反射高效代码,绝对受益 JAVA设计模式提高反射效率,Java代码精粹,高手实现,高效java代码,反射高效代码,绝对受益 JAVA设计模式提高反射效率,...
总体来说,本文的研究旨在解决Java在移动通讯设备上执行效率低下的问题,通过深入理解KVM的设计和技术,提出针对性的优化策略,以提高Java应用在这些设备上的运行性能,满足嵌入式环境的需求。这些优化策略不仅关乎...
这篇关于"JAVA-提高反射效率"的文章可能会探讨如何优化使用反射的代码,以减少性能损耗并提升整体程序效率。 首先,了解反射的基本用法是至关重要的。Java反射API主要由`java.lang.Class`、`java.lang.reflect....
合理设计数据库结构,优化SQL查询语句,选择合适的访问模式,并在编程中采取优化措施,都是提高Java数据库访问效率的有效途径。随着Java技术的不断发展和完善,其在数据库操作方面的优化技术也将继续受到业界的广泛...
综上所述,通过采用数据库连接池技术、选择合适的JDBC驱动程序以及利用JavaBean技术封装数据库操作等方式,可以在很大程度上提高Java访问数据库的效率,进而提升整个系统的性能表现。这些方法不仅有助于优化资源利用...
"提高Java开发数据库效率的技巧" 在Java开发中,数据库效率是一个非常重要的问题。为了提高数据库效率,需要遵循一些技巧和方法。本文将介绍如何使用Java连接数据库,提高数据库效率的技巧和方法。 一、使用JDBC-...
本Java精华内容深入Java API、嵌套类和内部类、与时间有关的类Date,DateFormat,Calendar、文件与流、Java变量类型间的相互转换、Java与Web、用连接池提高Servlet访问数据库的效率、Java扩展、应用服务器的集群策略及...
本篇文章将详细探讨如何利用JVM监控工具来提升Java应用的运行效率。 首先,JVM监控工具可以帮助我们实时查看和分析应用程序的运行状态。例如,VisualVM是Oracle提供的一款强大的多合一JVM工具,它包含了丰富的功能...