我正在开发内存数据结构,并希望增加持久性。
我正在寻找一种方法来快速做到这一点。我想过偶尔转储一个堆转储。
有没有办法将这个 Java 堆转储按原样加载到我的内存中?还是不可能?
否则,对整个信息的快速写入和快速读取的其他建议?(序列化可能需要很长时间)
-----------------编辑解释:--------由于我的记忆中可能充满了小信息,因此相互引用-因此序列化可能需要我有效地扫描我所有的记忆。重新加载也可能有问题。
另一方面,我可以定义一个巨大的数组,并且我创建的每个对象,我都会将它放入数组中。链接将是一个长数字,代表数组中的位置。现在,我可以按原样转储这个数组 - 也可以按原样重新加载它。
甚至有一些像 JRockit 这样的 jvm 会利用磁盘空间,因此也许可以非常快速地转储并非常快速地重新加载。为了证明我的观点,java dump包含了jvm的所有信息,而且生成速度很快。抱歉,但是 4GB 的序列化甚至还没有接近转储的秒数。
此外,内存就是内存,并且有一些操作系统可以让您快速转储内存。 https://superuser.com/questions/164960/how-do-i-dump-physical-memory-in-linux
仔细想想……这对于持久数据结构来说是一个很好的策略。在过去的十年里,内存数据库被大肆宣传。但为什么要为此安顿下来?如果我想要一个斐波那契堆怎么办——“几乎是持久的”。也就是说,每 5 分钟我会(快速)转储信息,如果发生电力中断,我会从 5 分钟前开始备份。
------编辑说明结束:--------
谢谢你。