`
pf_miles
  • 浏览: 134883 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java提高性能(部分转自http://www.matrix.org.cn)

    博客分类:
  • Java
阅读更多

1)这里比较一下ArrayList和LinkedList:
1.ArrayList是基于数组,LinkedList基于链表实现。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.查找操作indexOf,lastIndexOf,contains等,两者差不多。
这里只是理论上分析,事实上也不一定,比如ArrayList在末尾插入和删除数据就不设计到数据移动,不过还是
有这么个建议:随机访问比较多的话一定要用ArrayList而不是LinkedList,如果需要频繁的插入和删除应该
考虑用LinkedList来提高性能。

我个人认为,在大多数情况下都要优先考虑使用ArrayList。我曾经看过一个java1.5上的测试报告,数据显示当且仅当在“需要在list头部大量增删数据”时,LinkedList才显示出优势,其他情况下均败给ArrayList。有些时候,即使是需要在头部做大量操作,也可以通过反转list的形式把它变成尾部操作,这样就方便ArrayList了。所以一般LinkedList出场的几率很小。

2)复制数组的时候使用System.arraycopy静态方法,而不要通过循环遍历来一个个赋值。具体查看jdk文档。

3)multiple dimension array
Java里面的multiple dimension array实际上是用array of arrays来模拟的,这样导致他们可能并非储存在连续的内存空间,会引起比较糟糕的内存访问的问题。

IBM的ninja group开发了一个package来解决这个问题,Array Package

4)避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。

或许尽量在条件语句之前就计算好条件表达式是个好习惯,尽量让条件表达式是一个“量”而不是“表达式”。

5)为'Vectors' 和 'Hashtables'定义初始大小 JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原原先数组中的内容复制过来,最后,原先的数组再被回收。可见Vector容量的扩大是一个颇费时间的事。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小

6)使类和成员的可访问能力最小化
复合优先于继承
接口优先于抽象类

(当然,第6条乎跟性能联系不大,但却是一个很好的设计原则问题)

7)

如果字符串特别长,采用charAt逐一获取特定位置的字符是非常耗时的。因为每次获取制定索引位置的字符都要引起新的检索过程,更好的办法是将字符串通过调用toCharArray方法转换成字符数组,然后通过数组索引值获得指定位置的字符

8)使用移位操作来代替'a / b'操作 "/"是一个很“昂贵”的操作,使用移位操作将会更快更有效。

(这一条在其它语言中也是成立的,不怕麻烦的话可以考虑,不过一般不必为此周折...)

9)对于boolean值,避免不必要的等式判断 将一个boolean值与一个true比较是一个恒等操作(直接返回该boolean变量的值). 移走对于boolean的不必要操作至少会带来2个好处: 1)代码执行的更快 (生成的字节码少了5个字节); 2)代码也会更加干净

(这条貌似很浅显,但却是很多初学者会犯的毛病)

10)尽量不要将大对象放到HttpSession或其他须序列化的对象中,并注意及时清空Session

11)不要随便将大段代码放入Synchronized块中,这个很好理解,没必要的Synchronized块应该舍去。

12)在涉及字符串的大量更改操作中,使用StringBuffer/StringBuilder,若需要线程安全性,用StringBuffer;否则用StringBuider更有效率。这是因为StringBuffer为了保持线程安全性而损失了性能。同样的关系出现在Hashtable/HashMap和Vector/ArrayList上(前者线程安全,后者线程不安全,但更有效率)。

13)减少try块的使用。对于这个,一个可以接受的建议是:在编写功能组件时不进行异常的try/catch,用throws,但要给出每个方法可能抛出的异常的列表。等到在业务逻辑中(或者说main函数中)调用这些功能组件时在统一try/catch这些功能组件抛出的异常,集中处理。

好了,暂时就想到这些,肯定还有,以后再补充。

分享到:
评论

相关推荐

    jdk7 2.zip

    Java Development Kit(JDK)是Java编程语言的核心组件,它包含了一组开发工具,用于创建、编译、调试和运行Java应用程序。Oracle JDK是官方版本,由甲骨文公司提供,是Java开发者的重要工具。在 JDK 7 版本中,引入...

    向Weka添加自己的算法、core包分析及相关资料

    15. **Matrix.java**: - 实现了浮点矩阵的操作。 16. **Optimization.java**: - 提供优化算法,如BFGS更新法、主动集优化等。 17. **Utils.java**: - 提供一系列静态工具方法。 18. **Instances.java**: - ...

    Java实现pca

    在Java中实现PCA,可以帮助我们处理大量特征的数据,降低计算复杂性,提高模型的效率和可解释性。以下是对PCA及其Java实现的详细讲解。 一、PCA的基本概念 1. **数据降维**:PCA的主要目标是通过找到数据的主要...

    jmeter+ant++jenkins.docx

    3. **Ant**: Apache Ant 是一个 Java 库和命令行工具,其任务是驱动构建过程,这是一个软件项目的一部分。 4. **Tomcat**: Apache Tomcat 是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型...

    hadoop Big matrix muiltiple on java source.zip

    在本案例中,我们关注的是“hadoop Big matrix multiply on java source.zip”这个压缩包,其中包含两个Java源文件——TestMatrixMultiply.java和MatrixMultiply.java。这两个文件是关于如何在Hadoop环境下使用Java...

    java代码-TwoArray

    11. **性能优化**:处理大型数组时,可能会关注内存分配、缓存效率、算法复杂度等因素,以提高程序性能。 12. **异常处理**:在操作数组时,如越界访问、空指针等错误需要通过try-catch块捕获和处理。 要了解更多...

    Java-Sparse-Matrix-master.zip_matrix sparse java

    - 提高性能:在计算上,稀疏矩阵的算法可以针对性地优化,避免了对零元素的无效运算。 3. **Java实现稀疏矩阵** - 可以使用类来表示稀疏矩阵,包含三个主要成员:非零元素个数、行数、列数,以及一个二维数组或...

    java矩阵统计 包括一维和多维的矩阵的快速傅里叶变换等计算.zip

    Java矩阵统计与快速傅里叶变换(FFT)是数值计算中的关键部分,尤其在处理大量数据和信号处理中。在Java编程中,理解和应用这些概念能够帮助开发者解决复杂的问题,如图像处理、音频分析和大数据处理。以下是关于这...

    Matrix_Delegate.rar_android

    `Matrix_Delegate`就是一个这样的例子,它在C/C++层实现了`Matrix`的部分原生方法,提高了效率并降低了内存开销。 具体到`Matrix_Delegate.c`文件,可能包含了以下内容: 1. 定义了JNI函数,如`JNIEXPORT void ...

    matlab入门手册pdf下载

    MATLAB(Matrix Laboratory)是一款由MathWorks公司开发的高性能数值计算软件,广泛应用于科学研究、工程计算、数据分析、算法开发等多个领域。其核心优势在于强大的数学计算能力、丰富的图形处理功能以及便捷的编程...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java【第4章:数组与方法】_Java新特性对数组的支持

    i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { System.out.println(matrix[i][j]); }}` 三、数组的方法 1. length属性:每个数组都有一个内置的length属性,表示数组的长度。例如,`...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    手势控制旋转、平移、缩放

    在Android开发中,手势控制是用户交互的重要组成部分,特别是在图像视图(ImageView)上实现手势操作,如旋转、平移和缩放,可以极大地提升用户体验。`TouchImageView` 是一个自定义视图,它扩展了Android原生的`...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    encode_纠删码;rs码;java_

    - **New_G_Matrix.java**:可能涉及生成新的生成矩阵或者与生成矩阵相关的操作,如调整冗余比例、优化编码效率等。 在实际应用中,Java的库如Apache Commons Math提供了矩阵运算的支持,可以帮助简化上述过程的实现...

Global site tag (gtag.js) - Google Analytics