Java 处理HashMap/Hashtable/ArrayList中的大量对象时内存不足

Java 处理HashMap/Hashtable/ArrayList中的大量对象时内存不足,java,memory,Java,Memory,我正在做一个项目,其中需要在HashMap/Hashtable/ArrayList中加载数千个对象的数据。小型应用程序没有问题,但大型应用程序内存不足 请建议如何处理这种情况?为什么需要将其存储在内存中?我会说使用随机访问文件。为什么它需要在内存中?我会说使用随机访问文件。我想知道您的要求,为什么同时加载数千个对象很重要?你能提供更多的细节吗?也许您的实现可以重新设计,这样您就不需要在内存中加载那么多对象。我想知道您的要求,为什么同时加载数千个对象很重要?你能提供更多的细节吗?也许您的实现可以重

我正在做一个项目,其中需要在HashMap/Hashtable/ArrayList中加载数千个对象的数据。小型应用程序没有问题,但大型应用程序内存不足


请建议如何处理这种情况?

为什么需要将其存储在内存中?我会说使用随机访问文件。

为什么它需要在内存中?我会说使用随机访问文件。

我想知道您的要求,为什么同时加载数千个对象很重要?你能提供更多的细节吗?也许您的实现可以重新设计,这样您就不需要在内存中加载那么多对象。

我想知道您的要求,为什么同时加载数千个对象很重要?你能提供更多的细节吗?也许您的实现可以重新设计,这样您就不需要在内存中加载那么多对象。

不要一次将所有数据读入内存,也不要在执行之前扩展可用的内存


不能通过编程方式增加堆大小。

不要一次将所有数据读入内存,也不要在执行前扩展可用内存


您不能以编程方式增加堆大小。

要么您必须增加内存,要么您必须通过代码检查应用程序是否在某个点创建了许多对象(可能是在循环中)。如果存在,则使该对象无效(确保它不会影响您的应用程序流)。另一种选择是尝试使用更轻的对象(例如,如果可以正确重写toString()方法,则可以将bean变为更轻的字符串对象。这也将提高应用程序的性能)

要么您必须增加内存,要么您必须通过代码检查应用程序是否在某个点创建了许多对象(可能是在循环中)。如果存在,则使该对象无效(确保它不会影响您的应用程序流)。另一种选择是尝试使用更轻的对象(例如,如果可以正确重写toString()方法,则可以将bean变轻为字符串对象。这也将提高应用程序的性能)

您可以使用缓存系统,例如。这将使您能够控制所使用的“内存”。还有其他缓存实现,ehcache可能不适合您的需要。

您可以使用缓存系统,例如。这将使您能够控制所使用的“内存”。还有其他缓存实现,ehcache可能不适合您的需要。

您需要增加java堆空间。计算所需的空间并相应增加。当然,我会解释如何计算和增加它。试试这个,我的应用程序不是eclipse应用程序。它是一个桌面独立Java应用程序。那么如何从Java代码中增加内存呢?是的,正如@Thom所指出的,使用
随机访问文件
,或者@Randy所说的数据库。。我想说的是,你是否有足够的灵活性来支持DB。你不能在运行的Java程序中增加分配的堆空间量。如果发现内存不足,请在启动应用程序之前增加堆大小。您需要增加java堆空间。计算所需的空间并相应增加。当然,我会解释如何计算和增加它。试试这个,我的应用程序不是eclipse应用程序。它是一个桌面独立Java应用程序。那么如何从Java代码中增加内存呢?是的,正如@Thom所指出的,使用
随机访问文件
,或者@Randy所说的数据库。。我想说的是,你是否有足够的灵活性来支持DB。你不能在运行的Java程序中增加分配的堆空间量。如果发现内存不足,请在启动应用程序之前增加堆大小。在运行的代码中无法执行此操作。不能从正在运行的代码中删除。在看到您的回答后,我仍然认为您应该重新考虑是否需要同时加载内存中的所有对象。因为您不知道需要加载多少对象,所以即使尝试增加堆大小,也无法确定堆大小应该是多少。我认为你应该考虑使用一个文件或数据库,如@ Thom /RANDY。在看到你的回复后,我仍然认为你应该重新考虑在内存中同时加载所有对象的必要性。因为您不知道需要加载多少对象,所以即使尝试增加堆大小,也无法确定堆大小应该是多少。我认为您应该考虑使用@ Thom /兰迪建议的文件或数据库。