格式化
■ 文本格式化类
一 javatextDateFaormat
一 javatextNumberFaormat
一 javatextMessageFaormat
可能非常慢
■ 例如第一次调用DateFormatgeInstance()创建超过个对象
■ 每次调用DateFormatformat创建个对象加上第一次调用时的那次
一 重用同一个DateFormat实例而不是重复调用DateFormatgetInstance是很值得做的
■ 其它的格式化类有相似的特点
XML处理SAX
■ 处理XML文档的低级事件驱动库
■ 最好的选择如果
一 你需要以线性的方式遍历整个文档
一 你只需要查看几项
一 内存效率是一个问题
XML处理
■ 试着在你的应用程序里消除处理特定XML对象
■ 通过一个RMI调用传递DOM树结果会使整个java对象树序列化通常会倍甚至更多的空间
Buffered I/O
■ I/O类默认不缓沖
■ 为你的I/O流使用缓沖的包装器
BufferedOutputStream
BufferedInputStream
BufferedReader
BufferedWriter
■ 尝试在构造方法中使用缓沖大小参数
一 BufferedInputStream:默认个字节(JDK)
一 BufferedReader:默认个字符(JDK)
流与Readers
■ 在java里有两个并行的I/O接口
Reader和Writer
一 BufferedInputStream:字符序列(bit)
InputStream和OutputStream
一 字节序列(bit)
■ 处理基于文本的文件Readers&Writers更快
更快的幅度达%
参考OReilly的java Performance Tuning第八章
新I/O
■ 在JDK或更高版本javanio包给出了更多I/O选项
一 正则表达式匹配
一 内存映射缓存
一 非中断I/O
■ 这些能提供更高的I/O性能
序列化
■ 使一个对象变平允许使它流化成一个文件(为了存储)或者网络连接(为了传输)
一 添加Serializeable接口标记你的类
一 通过ObjectInputStream/ObjectOutputStream
■ 序列化被远程方法调用广泛使用
■ 序列化可能会非常昂贵
一 当你序列化一个对象时这个对象可达的每个对象都会被序列化可能会有非常多的对象
一 除了内部虚拟机程序还会大量使用反射
一 序列化是非常繁冗的
只有一个int数据的类占用个字节
序列化的对象包括了每个类成员及其值的全限定名
一 速度是不对称的反序列化比序列化速度更慢
序列化transient关键字
■ 可以重新定义序列化动作
一 使用transient关键字指出不需要在序列化流中包含的成员变量
Private transient String name;
一 这让你可以指出对象里不重要的成员变量或者当对象读入内存时可以重新计算的成员变量
序列化Externalizable接口
■ 消除序列化负载实现Externalizable接口而不是Serializable
Public void readExternal(ObjectInput out)
Public void writerExternal(ObjectOutput out)
■ 程序员完全要负责
一 管理序列化内容
一 调用readExternal()/wirteExternal()方法序列化对象
Externalizable