Java performance tips

一些有助于改善性能的小技巧

  1. 慎用异常
  2. 使用局部变量
  3. 位运算代替乘除法
  4. 替换switch
  5. 一维数组代替二维数组
  6. 提取表达式
  7. 展开循环
  8. 布尔运算代替位运算
  9. 使用arrayCopy()
  10. 使用Buffer进行I/O操作
  11. 使用clone()代替new
  12. 静态方法替代实例方法

NIO Buffer

简要记录一下Buffer对象的基本原理和操作。

重要参数

Buffer中有三个重要的参数,下面的表格描述了它们的作用和区别:

Buffer的参数表

NIO basics

NIO是在JDK1.4引入的,代表New IO,具有以下特性:

  • 为所有的原始类型提供缓冲(Buffer)支持
  • 使用Java.nio.charset.Charset作为字符集编解码解决方案
  • 增加通道(Channel)对象,作为新的原始I/O抽象
  • 支持锁和内存映射文件的文件访问接口
  • 提供了基于Selector的异步网络IO

Enter i3

这几天Ubuntu系统特别慢,鉴于我之前Chrome浏览器经常干到50多个Tab,没事儿就开着IntelliJ和Eclipse的不良记录,我必须寻找更加节省内存、提高效率的方法。首先得反省自己,Chrome不能再开那么多Tab页面了,太吃内存了,最多开15个(^_^)。陈皓(@左耳朵耗子)前几天发了条微博说这事儿,但是Chrome还是得用,一是习惯了,二是还得用红杏插件。所以,我就想能不能让Ubuntu省点内存,于是,开始折腾。

WordCounter

题目:给出一个含有英文小说的文本文件,统计英文单词出现的频率并按照逆序打印。

完整实现如下:

Performance difference for splitting strings

《Java程序性能优化》的3.1.3小节阐述了字符串分割的三种方法,并且用程序示例和图形说明了三种方法的性能差异。这三种方法分别是:split方法;使用StringTokenizer类;使用最原始的indexOf和substring方法。这三种方法的性能是依次增强的。但首先一个问题是:使用最后一种方法(本来应该是效率最高的)的例子试验时发现,这种方法却是最慢的,这是为什么呢?