- 只要有可能,就使用基本变量类型,而不使用对象类型。例如,使用 int,而不使用 Integer。
- 缓存那些频繁使用的寿命短的对象,避免一遍又一遍地重复重建相同的对象,并因此进行 GC。
- 在处理字符串时,使用 StringBuffer 而不使用字符串连接,因为字符串对象具有不可变的特性,并且需要创建额外的字符串对象,而这些对象最终必须经历 GC。
- 避免过度对 Java 控制台进行写操作,降低字符串对象处理、文本格式化和输出带来的成本。
- 实现数据库连接池,重用连接对象,而不是重复地打开和关闭连接。
- 使用线程池(thread pooling)。避免不停地创建和删除线程对象,特别是在大量使用线程的时候。
- 通过 System.gc() 调用避免在代码中调用 GC。GC 是一个“停止所有处理(stop the world)”的事件,它意味着除了 GC 线程自身外,其他所有执行线程都将处于挂起状态。如果必须调用 GC,那么可以在非紧急阶段或空闲阶段实现它。
- 避免在循环内分配对象,这会使对象在 Java 堆上的存活时间超过必要的存活时间。