Java

HTTP Status 406

用Spring MVC 4.0写一个REST服务,实验的过程中碰到了406错误,具体错误消息如下,

The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request “accept” headers.

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

WordCounter

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

完整实现如下:

Performance difference for splitting strings

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

subString() no memory leak any more

《Java程序性能优化》第三章Java程序优化首先讲的是字符串的特性及其相应的优化方法。3.1.2小节subString()方法的内存泄漏深入JDK的subString方法实现,并指出了大字符串对象可能存在的内存泄漏。我尝试把书中的程序段输入并运行,但结果并没有产生内存泄漏,原来情况有变。