Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环函数中的Java堆空间_Java_Heap_Space - Fatal编程技术网

循环函数中的Java堆空间

循环函数中的Java堆空间,java,heap,space,Java,Heap,Space,嗨 我有一个java应用程序,它正在处理来自数据库的大量记录。现在,在处理了其中大约160个之后,java运行抛出了一个“OutOfMemoryError:java堆空间”。因此,我更新了整个函数,以便一次只处理150条记录,当我只调用该函数一次时,效果很好,但是问题在于我必须处理大约10000条记录,这意味着我必须手动运行同一函数60次以上 我的问题是,有没有一种方法可以把这个函数放在一个循环中,并在不遇到问题的情况下运行不同的时间。我无法理解为什么它会遇到这个问题,因为该函数是自包含的,并且

嗨 我有一个java应用程序,它正在处理来自数据库的大量记录。现在,在处理了其中大约160个之后,java运行抛出了一个“OutOfMemoryError:java堆空间”。因此,我更新了整个函数,以便一次只处理150条记录,当我只调用该函数一次时,效果很好,但是问题在于我必须处理大约10000条记录,这意味着我必须手动运行同一函数60次以上

我的问题是,有没有一种方法可以把这个函数放在一个循环中,并在不遇到问题的情况下运行不同的时间。我无法理解为什么它会遇到这个问题,因为该函数是自包含的,并且没有使用以前调用该函数时生成的任何数据(正如我所说,我可以手动运行该函数60次左右,并获得所需的结果)


提前感谢

很可能您没有结束您的
语句
(s)和/或
结果集
(s)。这些在打开时会消耗大量资源。完成后一定要关上它们

我认为多次调用函数不是好方法。IMHO您必须编写一个存储过程来处理所有数据。数据库准备处理大量数据。

这些问题背后最可能的原因之一是对开放渠道/资源的不当处理。请确保每个打开的把手在完成工作后都已关闭。打开结果集会消耗大量内存资源。此外,仅依赖JVM进行内存管理不是一个好的实践。一个精心编写的代码将在很大程度上优化代码,即使不是有意这样做。

1:似乎您可以在循环中调用此函数。2:也许如果你发布代码,有人可以帮你找到为什么你要消耗这么多内存。如果是复杂的业务逻辑,我会将代码保存在应用程序中。如果我看不到代码,我应该认为sp是处理数据的更好方法。从体系结构上讲,工作就是为了这个目的而建立的数据库。但是,同样,我对代码或逻辑一无所知。:)好的,那么,循环的问题是知道你处理的最后一条记录在哪里,不是吗?不,这不会是个问题。我将编写一个从数据库中选择所有数据的查询。执行查询时不会发送所有数据,只有前X条记录由jdbc获取,在结果集中移动光标时,将获取下一条X条记录。