Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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
Android Lucene OutOfMemoryExceptoin_Android_Memory_Lucene - Fatal编程技术网

Android Lucene OutOfMemoryExceptoin

Android Lucene OutOfMemoryExceptoin,android,memory,lucene,Android,Memory,Lucene,我有一个Lucene索引,里面有1740本书的50571个文档。我有两个创建此索引的过程。第一个过程是逐个文档在设备文档上创建索引。这个过程非常缓慢。另一个过程是在服务器上创建图书索引(与我在设备上创建图书索引的方式完全相同),然后下载并将其与主索引合并。这一个创建主索引要快得多。无论哪种方式,创建索引都可以很好地工作 问题是,当我在下载合并索引上搜索时,我会得到一个OutOfMemoryException,但当我使用在设备上创建的索引进行搜索时,我没有得到该错误。我一本一本地浏览并创建了索引书

我有一个Lucene索引,里面有1740本书的50571个文档。我有两个创建此索引的过程。第一个过程是逐个文档在设备文档上创建索引。这个过程非常缓慢。另一个过程是在服务器上创建图书索引(与我在设备上创建图书索引的方式完全相同),然后下载并将其与主索引合并。这一个创建主索引要快得多。无论哪种方式,创建索引都可以很好地工作

问题是,当我在下载合并索引上搜索时,我会得到一个
OutOfMemoryException
,但当我使用在设备上创建的索引进行搜索时,我没有得到该错误。我一本一本地浏览并创建了索引书(下载合并),并在每本书被索引后进行搜索;基于这一点,当我读到第450本书时,我开始得到
OutOfMemoryException


是什么导致我的内存不足。

Lucene是个内存猪。在一起写入“合并”索引时,它将整个索引集存储在内存中两次。引自《卢森报》

请注意,这要求目录中的临时可用空间最多为2X 所有输入索引(包括起始索引)的总和。 如果读者/搜索者打开了起始索引,则暂时免费 起始索引的大小会增加所需的空间


这是一个很大的记忆。为了缓解这种情况,我们必须通过在索引编写器上调用
forceMerge(int)
来缩小索引的大小。这是一个缓慢的过程,但它确实缩小了索引的大小。每次索引目录中有50个或更多文件时,我都会用
1
参数来调用它。

目前无法判断代码中的原因。附加异常stacktrace&问题所涉及的代码。我怀疑您构建了某种大型数据结构,以便将所有数据同时保存在内存中。那个可能太大了。如果是这样的话,将数据分块处理。