Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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 在DirectByteBuffer中存储大哈希映射的方法_Java_Bytebuffer - Fatal编程技术网

Java 在DirectByteBuffer中存储大哈希映射的方法

Java 在DirectByteBuffer中存储大哈希映射的方法,java,bytebuffer,Java,Bytebuffer,我想在DirectByteBuffer中存储一个散列映射(最多100000000个条目),我需要读取和写入条目。hashmap将具有字符串键和可序列化对象。但是如果将哈希映射作为一个整体序列化并将其存储为字节缓冲区,每次我都需要对其进行反序列化,这可能会导致堆内存问题。是否有其他方法可以在DirectByteBuffer中存储键值、搜索键值并以优化的方式检索值? PS:我需要一个incache解决方案,并且我需要从java堆中释放对象(在我的hashmap中是值),因为它们的数量很大。通过使用D

我想在DirectByteBuffer中存储一个散列映射(最多100000000个条目),我需要读取和写入条目。hashmap将具有字符串键和可序列化对象。但是如果将哈希映射作为一个整体序列化并将其存储为字节缓冲区,每次我都需要对其进行反序列化,这可能会导致堆内存问题。是否有其他方法可以在DirectByteBuffer中存储键值、搜索键值并以优化的方式检索值?
PS:我需要一个incache解决方案,并且我需要从java堆中释放对象(在我的hashmap中是值),因为它们的数量很大。

通过使用DirectByteBuffer,您将使用本机内存。我假设您走这条路的原因是不想在堆内存中存储100000000,对吗?如果您关心java内存的使用情况,您可以设置JVM的最大堆大小来处理这个问题吗?(即-Xmx)?最终结果应该是相同的,您不必担心本机内存。这里有一篇文章讨论了这一点

为什么要将其存储在ByteBuffer中?请提供更多的背景资料。这是一些元数据,应该在应用程序中随时可用。我不能把它放在db里。这也应该远离GC。考虑到进入字节缓冲区的只是字节,这不会阻止任何东西被GC读取。为什么元数据不能通过哈希映射来使用?我已经提到了DirectByteBuffer,它将使用物理内存而不是堆内存…不,我仍然不认为有任何理由在这里使用DirectByteBuffer。一个简单的法线贴图似乎简单得多,而且你还没有清楚地解释为什么它不适合你。请围绕您认为这是一个问题的原因编辑您的问题(而不仅仅是添加注释),也许其他人可以帮助您。这样,您可以将其保存在堆内存中,并将其作为映射保存。不需要序列化。