`
gpqhl0071
  • 浏览: 54723 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

JAVA--编程中“为了性能”需做的26件事(02)

    博客分类:
  • JAVA
 
阅读更多
13.尽量减少对变量的重复计算

for(int i=0;i<list.size();i++)应该改为
for(int i=0,len=list.size();i<len;i++)并且在循环中应该避免使用复杂的表达式,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。

14.尽量避免不必要的创建

A a = new A(); if(i==1){list.add(a);}应该改为

if(i==1){ A a = new A();list.add(a);}


15.尽量在finally块中释放资源
程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。

16.尽量使用移位来代替'a/b'的操作
“/”是一个代价很高的操作,使用移位的操作将会更快和更有效


int num = a / 4; int num = a / 8;应该改为

int num = a 》 2; int num = a 》 3;但注意的是使用移位应添加注释,因为移位操作不直观,比较难理解。


17.尽量使用移位来代替'a*b'的操作
同样的,对于'*'操作,使用移位的操作将会更快和更有效

int num = a * 4; int num = a * 8;应该改为

int num = a 《 2; int num = a 《 3;


18.尽量确定StringBuffer的容量
StringBuffer的构造器会创建一个默认大小(通常是16)的字符数组。在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创建StringBuffer的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。

如:

StringBuffer buffer = new StringBuffer(1000);

19.尽量早释放无用对象的引用
大部分时间,方法局部引用变量所引用的对象会随着方法结束而变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null.

例如:

Public void test(){ Object obj = new Object(); …… Obj=null; }上面这个就没必要了,随着方法test()的执行完成,程序中obj引用变量的作用域就结束了。但是如果是改成下面:

Public void test(){ Object obj = new Object(); …… Obj=null;//执行耗时,耗内存操作;或调用耗时,耗内存的方法 …… } 这时候就有必要将obj赋值为null,可以尽早的释放对Object对象的引用。

20.尽量避免使用二维数组
二维数据占用的内存空间比一维数组多得多,大概10倍以上。

21.尽量避免使用split
除非是必须的,否则应该避免使用split,split由于支持正则表达式,所以效率比较低,如果是频繁的几十,几百万的调用将会耗费大量资源,如果确实需要频繁的调用split,可以考虑使用apache的StringUtils.split(string,char),频繁split的可以缓存结果。

22.ArrayList&LinkedList
一个是线性表,一个是链表,一句话,随机查询尽量使用ArrayList,ArrayList优于LinkedList,LinkedList还要移动指针,添加删除的操作LinkedList优于ArrayList,ArrayList还要移动数据,不过这是理论性分析,事实未必如此,重要的是理解好2者的数据结构,对症下药。

23.尽量使用System.arraycopy()代替通过来循环复制数组
System.arraycopy()要比通过循环来复制数组快的多。

24.尽量缓存经常使用的对象
尽可能将经常使用的对象进行缓存,可以使用数组,或HashMap的容器来进行缓存,但这种方式可能导致系统占用过多的缓存,性能下降,推荐可以使用一些第三方的开源工具,如EhCache,Oscache进行缓存,他们基本都实现了FIFO/FLU等缓存算法。

25.尽量避免非常大的内存分配
有时候问题不是由当时的堆状态造成的,而是因为分配失败造成的。分配的内存块都必须是连续的,而随着堆越来越满,找到较大的连续块越来越困难。

26.慎用异常
当创建一个异常时,需要收集一个栈跟踪(stack track),这个栈跟踪用于描述异常是在何处创建的。构建这些栈跟踪时需要为运行时栈做一份快照,正是这一部分开销很大。当需要创建一个Exception时,JVM不得不说:先别动,我想就您现在的样子存一份快照,所以暂时停止入栈和出栈操作。栈跟踪不只包含运行时栈中的一两个元素,而是包含这个栈中的每一个元素。

如果您创建一个Exception,那么就得付出代价。好在捕获异常开销不大,因此可以使用try-catch将核心内容包起来。从技术上讲,您甚至可以随意地抛出异常,而不用花费很大的代价。招致性能损失的并不是throw操作(尽管在没有预先创建异常的情况下就抛出异常是有点不寻常)。真正要花代价的是创建异常。幸运的是,好的编程习惯已教会我们,不应该不管三七二十一就抛出异常。异常是为异常的情况而设计的,使用时也应该牢记这一原则。
分享到:
评论

相关推荐

    Java编程中“为了性能”需做的26件事

    Java编程中“为了性能”需做的26件事 1.尽量在合适的场合使用单例、2.尽量避免随意使用静态变量。

    Java-Java函数式编程教程

    Java函数式编程是一种编程范式,它强调使用函数作为程序的基本构建块,将计算...通过掌握这些核心概念和实践,你可以提升Java编程能力,特别是在处理大数据、并发和复杂逻辑时,函数式编程能够显著提高代码质量和效率。

    mysql-connector-java-5.1.7-bin.jar

    为了在Java环境中与MySQL数据库进行交互,我们需要一个中间桥梁,这就是所谓的JDBC(Java Database Connectivity)驱动。"mysql-connector-java-5.1.7-bin.jar" 文件就是这个桥梁,它是一个Java归档(JAR)文件,...

    mysql-connector-java-5.1.47-bin.jar

    在Java编程中,当你需要在应用程序中连接到MySQL数据库时,这个jar包就起到了关键作用。首先,你需要将`mysql-connector-java-5.1.47-bin.jar`添加到你的项目类路径(ClassPath)中,这样Java运行时环境才能找到并...

    mysql-connector-java-8.0.27.zip

    这个`mysql-connector-java-8.0.27.zip`文件包含了MySQL最新版本8.0.27的Java驱动程序,对于Java数据库编程至关重要。 **MySQL Connector/J** MySQL Connector/J是MySQL官方提供的JDBC(Java Database Connectivity...

    mysql-connector-java-5.1.45-bin.jar

    在Java编程中,为了连接到MySQL数据库,我们需要一个适配器或驱动程序,这就是MySQL Connector/J的角色。它实现了JDBC(Java Database Connectivity)接口,使得Java程序可以通过标准的JDBC API来操作MySQL数据库。...

    mysql-connector-java-5.1.40-bin.jar连接器

    JDBC是Sun Microsystems(现为Oracle公司)为Java编程语言设计的一套标准API,它的主要功能是为Java开发者提供一种统一的方式来访问各种不同类型的数据库,而无需关心具体的数据库厂商。通过JDBC,开发者可以编写...

    IBM--JAVA编程(中文)

    【IBM--JAVA编程(中文)】是一门专为学习IBM平台上的JAVA编程设计的课程,适合初学者和有一定基础的开发者。此课程采用中文教学,旨在帮助学员掌握JAVA语言的核心概念,以及在IBM环境中进行应用开发的技能。通过...

    java-1.8.0-openjdk.linux.x86_64

    此外,它还提供了Lambda表达式、函数式接口、Stream API、Optional类等Java 8的新特性,这些特性极大地提升了代码的简洁性和可读性,使得编程更加高效。 对于Linux x86_64架构,这个版本的OpenJDK优化了64位系统上...

    java-8-openjdk-amd64

    首先,Java 8是Java编程语言的一个重大版本更新,于2014年发布。它引入了多项新特性,极大地提高了开发效率和代码质量。其中最引人注目的包括: 1. **Lambda表达式**:这是一种简洁的匿名函数表示方式,允许将代码...

    mysql-connector-java-gpl-5.1.36

    MySQL Connector/J是MySQL数据库系统与Java应用程序之间的桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得...理解这些核心概念和用法,可以帮助开发者有效地使用MySQL数据库进行Java编程。

    13-Java并发编程学习宝典.zip

    Java并发编程是软件开发中的重要领域,特别是在大型系统和高并发场景中不可或缺。"13-Java并发编程学习宝典.zip" 包含了一系列关于Java并发编程的学习资源,旨在帮助开发者掌握多线程编程的核心技术和最佳实践。以下...

    java编程规范-性能篇

    Java编程规范在性能方面的重要性不言而喻,良好的编码习惯能够显著提升程序的运行效率,减少不必要的资源消耗。以下是对给定文件中提到的一些关键性能规则和建议的详细解释: 1. **日志规则**: - 在输出Debug或...

    mysql-connector-java-5.1.15-bin.jar

    在Java编程环境中,当你需要连接到MySQL数据库时,你需要在类路径中包含这个JAR文件。JDBC驱动程序主要分为四种类型:Type 1、Type 2、Type 3和Type 4,其中MySQL Connector/J属于Type 4,即纯Java实现,无需依赖于...

    java-tcp-udp编程

    Java是世界上最流行的编程语言之一,尤其在服务器端和网络编程领域有着广泛的应用。TCP(传输控制协议)和UDP(用户数据报协议)是网络通信中的两种主要协议,它们各有特点,适应不同的应用场景。本篇文章将深入探讨...

    Java多线程-Socket编程

    Java 多线程-Socket 编程是指在 Java 语言中使用多线程技术来实现网络编程,特别是使用 Socket 编程来实现客户端和服务器端的通信。在 Java 中,多线程可以使用 Thread 类和 Runnable 接口来实现,而 Socket 编程则...

    selenium-java-2.47.1.zip

    1. **libs**:包含了Selenium Java绑定所需的库文件,这些jar文件在编写测试脚本时需要引入到项目中。 2. **src**:源代码目录,对于开发者来说,查看源码有助于深入理解其工作原理。 3. **docs**:文档目录,可能...

    JAVA-OCR.rar_Java ORC编程_OCR Java_ORC java编程_orc java

    6. **性能优化**:由于OCR可能涉及到大量的计算,因此在Java中进行OCR编程时,需要考虑性能优化,如使用多线程、内存管理等。 7. **实战应用**:Java OCR可以应用于各种实际场景,如自动填写表单、识别身份证信息、...

    MySQL官方提供的驱动包 mysql-connector-java-5.1.30.zip (亲测可用)

    在Java编程环境中,JDBC驱动是连接数据库的标准方式。MySQL的JDBC驱动分为四个版本:Type 1、Type 2、Type 3和Type 4。`mysql-connector-java-5.1.30.zip`中的驱动属于Type 4,完全用Java编写,无需依赖特定的数据库...

    基于Java的t-io高性能网络编程设计源码

    本项目是一个基于Java语言开发的t-io高性能网络编程项目,包含442个文件,主要文件类型包括Java源代码、BAT批处理文件、XML配置文件、Git忽略文件、文本文件、图片、Shell脚本、属性文件和DOCX文档。系统设计旨在...

Global site tag (gtag.js) - Google Analytics