您如何优化具有大量(数百万)长寿命对象的应用程序的堆大小使用?(大缓存,从数据库加载大量记录)
- 使用正确的数据类型
- 避免使用 java.lang.String 来表示其他数据类型
- 避免重复的对象
- 如果预先知道值,则使用枚举
- 使用对象池
- String.intern() (好主意?)
- 仅加载/保留您需要的对象
我正在寻找一般编程或 Java 特定的答案。没有时髦的编译器开关。
编辑:
优化可以在堆中出现数百万次的 POJO 的内存表示。
用例
- 在内存中加载一个巨大的 csv 文件(转换为 POJO)
- 使用休眠从数据库中检索数百万条记录
答案简历:
- 使用享元模式
- 写入时复制
- 与加载具有 3 个属性的 10M 对象相比,拥有 3 个大小为 10M 的数组(或其他数据结构)是否更有效?(操作数据可能会很痛苦,但如果你真的内存不足......)