`

java 几种性能优化的总结

 
阅读更多
1、使用StringBuilder
一般来说,使用 StringBuilder 的效果要优于使用 + 操作符。如果可能的话请在需要跨多个方法传递引用的情况下选择 StringBuilder,因为 String 要消耗额外的资源。JOOQ在生成复杂的SQL语句便使用了这样的方式。在整个抽象语法树(AST Abstract Syntax Tree)SQL传递过程中仅使用了一个 StringBuilder 。

更加悲剧的是,如果你仍在使用 StringBuffer 的话,那么用 StringBuilder 代替 StringBuffer 吧,毕竟需要同步字符串的情况真的不多。

2、不要使用iterator()方法
这条建议不适用于一般的场合,仅适用于在 N.O.P.E 分支深处的场景。尽管如此也应该有所了解。Java 5格式的循环写法非常的方便,以至于我们可以忘记内部的循环方法,比如:
for (String value : strings) {
    // Do something useful here
}

当每次代码运行到这个循环时,如果 strings 变量是一个 Iterable 的话,代码将会自动创建一个Iterator 的实例。如果使用的是 ArrayList 的话,虚拟机会自动在堆上为对象分配3个整数类型大小的内存。
private class Itr implements Iterator<E> {
    int cursor;
    int lastRet = -1;
    int expectedModCount = modCount;
    // ...

也可以用下面等价的循环方式来替代上面的 for 循环,仅仅是在栈上“浪费”了区区一个整形,相当划算。
for (int i = 0; i < size; i++) {
    String value : strings.get(i);
    // Do something useful here
}


如果循环中字符串的值是不怎么变化,也可用数组来实现循环。
for (String value : stringArray) {
    // Do something useful here
}


小结
无论是从易读写的角度来说,还是从API设计的角度来说迭代器、Iterable接口和 foreach 循环都是非常好用的。
但代价是,使用它们时是会额外在堆上为每个循环子创建一个对象。

3、使用entrySet()
当我们想遍历一个用键值对形式保存的 Map 时,必须要为下面的代码找到一个很好的理由:
for (K key : map.keySet()) {
    V value : map.get(key);
}

更不用说下面的写法:
for (Entry<K, V> entry : map.entrySet()) {
    K key = entry.getKey();
    V value = entry.getValue();
}


在我们使用 N.O.P.E. 分支应该慎用map。因为很多看似时间复杂度为 O(1) 的访问操作其实是由一系列的操作组成的。而且访问本身也不是免费的。至少,如果不得不使用map的话,那么要用 entrySet() 方法去迭代,这样的话,我们要访问的就仅仅是Map.Entry的实例。

小结
在需要迭代键值对形式的Map时一定要用 entrySet() 方法。

4.for循环优化

list.size()每次循环都会被执行一次,这无疑会影响程序的性能,所以应该将其放到循环外面,用一个变量来代替。

避免在for循环中捕捉异常

提取与循环无关的表达式避免在for循环中进行一些无用的运算

5.集合初始化时初始化个数

6.尽量实现对象重用
系统要花时间生成对象,以后还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程序的性能带来很大的影响。

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

8.StringTokenizer代替substring()和indexOf()
StringTokenizer是java中object类的一个子类,继承自 Enumeration( public interface Enumeration实现 Enumeration(列举) 接口的对象,它生成一系列元素,一次生成一个)接口。

9.System.arraycopy()实现数组值的拷贝
两个数组间的复制建议不要使用循环,Java提供了一个数组拷贝的方法。

10.尽量指定类、方法的final修饰符

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    10种java性能优化方案.docx

    本文将详细介绍10种Java性能优化策略,并重点解析文档中提到的几个关键点。 #### 二、hashCode() 方法优化 1. **背景**:`hashCode()` 方法在Java中用于快速查找对象。当对象存储在哈希表中时,例如`HashMap`,其...

    35 个 Java 代码性能优化总结

    ### 35个Java代码性能优化总结 #### 前言 代码优化是软件开发中的一个重要环节,尤其在Java这样的大型应用开发中更是至关重要。合理的优化不仅能够显著提高应用程序的性能,还能降低资源消耗,提升用户体验。本文将...

    java调用本地dll的几种方法性能对比测试

    java调用本地dll的几种方法性能对比测试。 JNA消耗的总时间(ms):5406 bridj消耗的总时间(ms):984 JNI消耗的总时间(ms):47 包含c++源码和java源码,部署和使用方法。在win7和winxp下测试用过。 部分源码是...

    java程序性能优化

    以上介绍了几种常见的Java程序性能优化技巧,包括避免在循环条件中使用复杂表达式、合理设置集合类的初始大小、在`finally`块中关闭资源、使用`System.arraycopy()`代替循环复制数组以及将简单的getter/setter方法...

    Java IO 性能优化

    ### Java IO性能优化 #### 4.1 基本IO操作 在Java开发中,`java.io`包是处理输入输出操作的核心组件。虽然它旨在简化开发人员的工作流程,但初学者常常会因为不了解其内部机制而做出降低IO性能的选择。通过深入...

    JAVA线程安全及性能的优化.doc

    ### JAVA线程安全及性能优化的关键知识点 #### 一、JAVA内存模型与线程安全的基础概念 **JAVA内存模型**是理解线程安全的核心。不同的操作系统平台可能有不同的内存管理方式,但Java虚拟机(JVM)提供了一套统一的...

    Java性能优化

    ### Java性能优化关键知识点 #### 一、合理运用单例模式 **单例模式**是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java性能优化中,合理使用单例模式可以带来以下优势: 1. **...

    实战Java虚拟机——JVM故障诊断与性能优化.pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》是一本深入探讨Java开发中的关键环节——Java虚拟机(JVM)的专著。本书聚焦于实际应用中的问题解决和性能调优,对于Java开发者和系统管理员来说,是提升技术水平的重要...

    oracle连接java的几种方法

    本篇文章将详细介绍在Java中连接Oracle数据库的几种常见方法,以及相关的源码示例。 1. JDBC-ODBC桥连接: JDBC-ODBC桥是Java早期连接数据库的一种方式,它依赖于操作系统上的ODBC数据源。首先,你需要在系统中...

    基于Soot的JAVA字节码优化及性能分析.pdf

    Java性能优化存在以下几点挑战: 1. 应用程序的设计和编码:应用程序的设计和编码对性能的影响非常大。 2. 虚拟机执行字节码的速度:虚拟机的执行速度对性能的影响也非常大。 3. 运行库的运行速度:运行库的运行...

    java 解析XML性能对比分析Demo

    本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...

    JAVA性能测试与调优案例

    通过实例分析了JVM内存泄漏的几种情况,并展示了如何使用JProfile等工具来跟踪内存泄漏问题。 ### 性能测试与调优案例分析 文档中提供了一个性能测试案例,对比了采用client和server版本JVM的Tomcat 5.5.28服务器在...

    Java代码循环的优化

    ### Java代码循环的优化 在Java编程中,循环是...通过以上几种方法,可以有效地优化Java中的循环结构,从而提升程序的整体性能。在实际开发过程中,开发者应该根据具体情况灵活运用这些技巧,以达到最佳的性能效果。

    性能优化pdf (pdf格式ppt)

    观察机器性能的方法多种多样,具体包括但不限于以下几种: - **监控工具**: 使用专业的监控工具来实时监控系统各项指标; - **日志分析**: 通过对系统日志的分析来发现潜在的问题; - **压力测试**: 模拟高负载场景...

    java性能分析文档

    10. **JVM参数调优**:根据应用程序的需求,调整JVM启动参数,如-Xms, -Xmx控制堆大小,-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio控制堆空闲比例,-XX:NewRatio调整新生代和老年代的比例等,都是性能优化的重要...

    java问题定位技术+性能优化

    ### Java问题定位技术+性能优化知识点详述 #### 一、Java线程堆栈分析 **1.1 如何输出线程堆栈?** - **命令行方式**: 使用`jstack`命令可以输出指定Java进程的线程堆栈信息。 - `jstack &lt;pid&gt;`: 输出指定PID的...

    Java认证考试基础知识辅导Java程序性能优化

    在软件开发领域,特别是在企业级应用中,Java作为一种广泛应用的编程语言,其程序性能优化是至关重要的环节。本文将从几个方面介绍如何进行Java程序性能优化,包括循环优化、初始化大小设置、异常处理、数组复制以及...

Global site tag (gtag.js) - Google Analytics