缓冲式I/O
- 使用二进制数据的文件I/O,使用一个BufferedInputStream或BufferedOutputStream来包装底层的文件流。对于使用字符数据的文件I/O,使用BufferedReader或BufferedWriter来包装底层的流
类加载
- Java的类加载器使用了双亲委派模型,一个类加载器在收到加载类的请求后,首先会把这个请求委派给父类加载器去完成,每隔层次的类加载器都如此处理,一个到启动类加载器;如果启动类加载器无法完成加载请求,才会沿这个路径返回,找到合适的类加载器。
- 在存在多个类加载器的复杂应用中,让这些类加载器支持并行,可以解决系统类加载器或者类加载器上的瓶颈问题。
如果应用时在单线程内,则通过一个类加载器加载很多类,关掉Java支持并行的特性可能会有好处
随机数
- Java默认的Random类的初始化的成本很高,但是一旦初始化完毕,就可以重用。
- 在多线程代码中,应该首选ThreadLocalRandom类。
异常
- 处理异常的代价未必会很高,不过还是应该在适合的时候采用。
- 栈越深,处理异常的代价越高。
字符串
- 一行的字符串连接代码性能很不错。
- 对于多行的连接操作,一定要确保使用StringBuilder。
集合
- 确定集合的大小减少扩容的性能损耗
- 根据集合使用情况选择具体的集合类