`

JAVA高性能编程

    博客分类:
  • JAVA
 
阅读更多

1.这里比较一下ArrayList和LinkedList:

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

2.减少不必要的对象的创建是提高性能的好办法。不仅对JAVA,所有语言都适用。

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

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

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

6.使用'System.arraycopy ()'代替通过来循环复制数组,'System.arraycopy ()' 要比通过循环来复制数组快的多

7.在一些知道循环次数的循环中使用short甚至byte.好象很多人习惯用int  

8.字符串的连接尽可能使用stringbuffer ,stringbuilder,java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用 于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一 致。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。 append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。

只要发生有关源序列(如在源序列中追加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源上实现同步。

每个字符串缓 冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

java.lang.StringBuilder 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。 append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append("le") 将使字符串生成器包含“startle”,而 z.insert(4, "le") 将更改字符串生成器,使之包含“starlet”。

通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动 增大。

将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

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

10.java中有很一些类是为同步而设置的。比如Hashtable,为了防止多个用户同时访问时出现问题进行了一些很好的设计。如果,你的数据可以被多个人访问,但是是一次写入,然后基本上值有读的操作,那就可以考虑不用它的同步机制,而是用HashMap等来代替它。而自己在适当的地方做些控制。

 
分享到:
评论

相关推荐

    Java高性能编程

    Java高性能编程

    Java编程中为了性能需做的26件事 (编程必看)

    Java编程中为了性能需做的26件事 (编程必看) 对于一个有2年以上工作经验的程序员,也未必能搞清楚java编程时性能的注意事项;所以建议新手老手必看;

    Java高性能编程 Speed is a Feature !!!

    目录 1. Little定律 2. 什么使程序这么慢 3. 高性能Java 4. 性能究竟如何? 5. JVM调优简介 用更少的资源做更多的工作!

    Wasabi1234#Java-Interview-Tutorial#Java高性能编程实战 - 线程终止1

    Destroy: JDK未实现该方法- 理想输出- 程序执行结果没有保证同步代码块里面数据的一致性,破坏了线程安全2 真正的线程终止如果目标线程在调用Objec

    java最新高薪面试题库.docx

    什么是Java虚拟机(JVM)?它如何工作? 什么是垃圾回收?Java中的垃圾回收是如何实现的?...如何实现Java高性能编程? 什么是JVM调优?如何进行Java JVM调优? 什么是Java中的锁竞争?如何优化锁竞争?

    Linux高性能服务器编程(完整书签)

    Linux高性能服务器编程 Linux高性能服务器编程 Linux高性能服务器编程 Linux高性能服务器编程 Linux高性能服务器编程

    java并发编程从入门到精通

    《Java并发编程从入门到精通》作者结合自己10多年Java并发编程经验,详细介绍了Java并发编程的基础概念、工作原理、编程技巧和注意事项,对Java高性能高并发编程有极大的参考价值。 《Java并发编程从入门到精通》...

    java并发编程实战中文加英文版加源码

    书籍是什么,是希望,是神圣的,你们这些译者简直就是在犯罪 ,不过要是英文功底不好,还是建议买本看吧,谁让你英文水平不如他们呢 《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的...

    Java NIO 高性能编程

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了如何才能充分利用新的 I/O ...

    JAVA并发编程实践

    《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...

    java并发编程实践高清中文版+源码

    《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...

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

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

    JAVA并发编程实践.pdf

    《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...

    使用epoll进行高性能网络编程

    使用epoll进行高性能网络编程.pdf

    华为资料 JAVA编程性能规则

    大家在编码设计和编程实现中自觉地选用高性能的方法,使系统性能达到最优化,避免虽然系统设计优良,却因为编码不当导致性能下降。

    Java并发编程实战

    1.3.3 性能问题 1.4 线程无处不在 第一部分 基础知识 第2章 线程安全性 2.1 什么是线程安全性 2.2 原子性 2.2.1 竞态条件 2.2.2 示例:延迟初始化中的竞态条件 2.2.3 复合操作 2.3 加锁机制 2.3.1 内置锁...

    JAVA并发编程实践高清中文带书签

    《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...

    JAVA并发编程实践(英文版)

    《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...

    Netty初探:掌握高性能网络通信框架,提升Java网络编程技能

    Netty是一个高性能、异步的网络通信框架,它解决了JDK自带的NIO API使用复杂的问题,提供了更高的性能和更低的延迟。...通过学习Netty,可以提升我们的Java网络编程技能,为构建高性能的分布式系统打下坚实的基础。

    Java网络编程(第3版) 中文版

    Java网络编程(第3版) 《Java网络编程》第三版会为你介绍Java网络API的最新特性。本书讨论了JDK 1.4和1.5(现在已命名为J2SE 5)中所做的所有修改和增补。本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)...

Global site tag (gtag.js) - Google Analytics