我正在做一个项目,其中需要在 HashMap/Hashtable/ArrayList 中加载数千个对象的数据。小型应用程序没有问题,但在大型应用程序中内存不足。
请建议如何处理这种情况?
为什么它需要在内存中?我会说使用随机访问文件。
我想知道您在这里的要求,为什么同时加载数千个对象很重要?你能提供更多关于它的细节吗?也许您的实现可以重新设计,这样您就不需要在内存中加载那么多对象。
不要一次将所有数据读入内存,或者在执行之前扩展可用内存。
您不能以编程方式增加堆大小。
要么您必须增加内存,要么您必须检查代码是否存在应用程序创建许多对象的某个点(可能在循环中)。如果它在那里,则取消该对象(确保它不会影响您的应用程序流程)。另一种选择尝试使用更轻的对象(例如,如果您可以正确覆盖 toString() 方法,则可以使 bean 对字符串对象更轻。这也将提高应用程序的性能)
您可以使用缓存系统,例如ehcache。这将使您对使用的“内存”有所控制。还有其他缓存实现,ehcache 可能不适合您的需求。