我在服务器上运行ChronicleMap
(v2.3.2),使用以下调用创建:
ChronicleMapBuilder.of(MyKey.class, MyValue.class).entries(20_000_000).createPersistedTo(pathToData);
ChronicleMap
中存储的条目数可能需要发展。因此,我设想在应用程序启动时执行以下操作:
ChronicleMap
ChronicleMap
ChronicleMap
ChronicleMap
的内容复制到新的ChronicleMap
但是,我在ChronicleMap公开的界面中看不到任何内容,这样我就可以找到创建时传递给entries
方法的值。我假设longSize()
只是实际存储的条目数,而不是地图的最大大小。
有没有办法找出这个价值?或者也许有更好的方法来进行这种迁移?
答案 0 :(得分:1)
如果在应用程序启动时执行这一系列步骤并且新的大小(从配置文件加载)发生了变化,那么实际上将这些数量的新条目插入到地图中,即。即在应用程序关闭时,地图大小等于新大小(从配置加载),为什么你不能将地图的longSize()
与新的预期大小进行比较?
无法检索映射到entries()
配置的值,因为它甚至不是内部ChronicleMap状态的一部分,i。即它不存储在私人领域。
防弹方法是在更新主配置文件时保留以前的配置文件,以比较其中的大小配置。
没有基本不同且更好的方法来发展ChronicleMap大小。如果您需要改进尺寸,ChronicleMap并不适合。所以你需要写一些这样的样板代码。
纪事地图3可能超出限制(原始尺寸可达x1000),但如果尺寸超过最初配置的entries()
数字,则其性能会急剧下降。
更新。另外需要注意的是,在某些情况下,您实际上可能不需要更改尺寸,例如: G。如果值很大(KB及以上)且条目数也很大。在这种情况下,您可以从一开始就配置最大可能的Map大小,但由于延迟页面分配的Linux功能,它不会过度使用内存。