Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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_Collections_Memory Mapping - Fatal编程技术网

Java中的内存映射集合

Java中的内存映射集合,java,collections,memory-mapping,Java,Collections,Memory Mapping,我正在填充JVM堆空间 更改参数为JVM提供更多堆空间,或者在代码中更改算法中的某些内容以不使用太多空间,这是两个最推荐的选项 但是,如果已经尝试并应用了这两种方法,并且仍然出现内存不足的异常,那么我想看看其他选项是什么 我发现了“”的这个例子和一个名为“”的库,它们是解决我的问题的一种有趣的方法。不幸的是,这个库已经有一年多没有更新了,而且它也没有出现在任何Maven repo中——所以对我来说,它不是一个真正可靠的库 我的问题是,是否有其他库可以做到这一点,或者有一种很好的实现方法(将集合对

我正在填充JVM堆空间

更改参数为JVM提供更多堆空间,或者在代码中更改算法中的某些内容以不使用太多空间,这是两个最推荐的选项

但是,如果已经尝试并应用了这两种方法,并且仍然出现内存不足的异常,那么我想看看其他选项是什么

我发现了“”的这个例子和一个名为“”的库,它们是解决我的问题的一种有趣的方法。不幸的是,这个库已经有一年多没有更新了,而且它也没有出现在任何Maven repo中——所以对我来说,它不是一个真正可靠的库


我的问题是,是否有其他库可以做到这一点,或者有一种很好的实现方法(将集合对象(列表和集合)映射到内存中)?

听起来您要么遇到内存泄漏问题,要么试图将过大的对象放入内存


您是否尝试过粗略估计加载数据所需的内存量?

听起来您要么遇到内存泄漏问题,要么试图将过大的对象放入内存


您是否尝试过粗略估计加载数据所需的内存量?

假设您没有内存泄漏或其他问题,并且确实需要大量无法放入堆中的存储空间(我发现不太可能),您基本上只有一个选择:

不要把你的数据放在堆上。就这么简单。现在,您使用哪种方法将数据移出取决于您的需求(什么样的数据、更新频率以及更新的实际数量?)


注意:您可以在64位虚拟机上使用非常大的堆,如果需要,还可以扩大操作系统的交换空间。简单地增加最大堆大小可能是最简单的解决方案(即使这意味着大量交换)。在您概述的情况下,我当然会首先尝试这一点。

假设您没有内存泄漏或其他问题,并且确实需要大量的存储空间,无法将其放入堆中(我发现不太可能),那么您基本上只有一个选择:

不要把你的数据放在堆上。就这么简单。现在,您使用哪种方法将数据移出取决于您的需求(什么样的数据、更新频率以及更新的实际数量?)


注意:您可以在64位虚拟机上使用非常大的堆,如果需要,还可以扩大操作系统的交换空间。简单地增加最大堆大小可能是最简单的解决方案(即使这意味着大量交换)。在你概述的情况下,我当然会先尝试一下。

不幸的是,该库已经一年多没有更新了,而且它也没有出现在任何Maven repo中-所以对我来说,它不是一个真正可靠的库
,我同意,我写了它。)

我建议你看看哪个更高的性能已经用了一点。它实际上是为列表和队列设计的,但您可以将其用于带有其他数据结构的映射或集合

根据您的需求,您可以编写自己的库。e、 对于时间序列数据,我编写了一个不同的库,不幸的是它不是开源的,但可以非常干净地加载500+GB的表

它不在任何Maven回购协议中


这本书也不是,但如果有人能加上它,我会很高兴的。

不幸的是,图书馆已经一年多没有更新了,而且它也没有出现在任何Maven repo中-所以对我来说,它不是一本真正可靠的书
我同意,我写了它。;)

我建议你看看哪个更高的性能已经用了一点。它实际上是为列表和队列设计的,但您可以将其用于带有其他数据结构的映射或集合

根据您的需求,您可以编写自己的库。e、 对于时间序列数据,我编写了一个不同的库,不幸的是它不是开源的,但可以非常干净地加载500+GB的表

它不在任何Maven回购协议中


这本书也不是,但如果有人能加上它,你会很高兴的。

你没有说你正在使用什么样的收藏,或者你使用它们的方式,所以很难给出建议。但是,有几件事需要记住:

  • 将对象保留在Java堆上始终是最简单的选择,而且RAM相对便宜
  • 盲目地移动到内存映射数据很可能会产生可怕的性能,尤其是在文件中移动和/或进行大量更改时。基于散列的集合类型最糟糕,因为它们通过分发数据来工作。基于树的集合类型通常是更好的选择,而线性集合可以兼而有之
  • 一旦移出堆,就需要一种将对象转换为Java或从Java转换为Java的方法。对象序列化是最简单的,但会增加很多开销。通过字节缓冲区访问的二进制对象通常是更好的选择,但您需要有线程意识
  • 您还必须为堆外对象管理自己的垃圾收集。如果您所做的只是创建/更新,那么这不是问题,但是如果您正在删除,那么很快就会成为一种痛苦
  • 如果您有大量数据,并且需要以各种方式访问这些数据,那么数据库可能是您的最佳选择

你没有说你在使用什么样的收藏,或者你使用它们的方式,所以很难给出建议。但是,有几件事需要记住:

  • 将对象保留在Java堆上始终是最简单的选择,而且RAM相对便宜
  • 盲目地移动到内存映射数据很可能会产生可怕的性能,尤其是在文件中移动和/或进行大量更改时。基于散列的集合类型最糟糕,因为它们通过分发数据来工作。基于树的集合类型通常是更好的选择,而线性集合可以兼而有之
  • 一旦移出堆,就需要一种将对象转换为Java或从Java转换为Java的方法。对象序列化是最简单的,但会增加很多开销。二进制对象