Java 使用db4o在数据模型中缓存大的子对象

Java 使用db4o在数据模型中缓存大的子对象,java,db4o,weak-references,Java,Db4o,Weak References,我有一个带有骨架元数据和大型数据对象的数据模型。我希望将骨架保留在内存中,并保留对数据对象的弱引用。我知道我将如何用纯Java实现这一点,我将如何创建WeakHashMap和清理等。但我想知道,在数据对象被GC处理后,如何最好地恢复它们 我是否应该向地图添加一个技术密钥,并将其分配给数据对象中的字段,以便再次找到它?或者我应该调用db.ext.getId并使用此ID作为技术密钥?如果是这样,在加载父级时如何获取这些密钥?您有什么建议?我想为您的大型数据对象添加一个技术密钥。然后将此技术密钥存储在

我有一个带有骨架元数据和大型数据对象的数据模型。我希望将骨架保留在内存中,并保留对数据对象的弱引用。我知道我将如何用纯Java实现这一点,我将如何创建WeakHashMap和清理等。但我想知道,在数据对象被GC处理后,如何最好地恢复它们


我是否应该向地图添加一个技术密钥,并将其分配给数据对象中的字段,以便再次找到它?或者我应该调用db.ext.getId并使用此ID作为技术密钥?如果是这样,在加载父级时如何获取这些密钥?您有什么建议?

我想为您的大型数据对象添加一个技术密钥。然后将此技术密钥存储在元数据类中。 现在,当您获得大数据对象时,您可以通过它的技术关键来获得它。这是一个非常简单的解决方案


Db4o实际上使用弱引用来返回相同的对象并避免不必要的反序列化。因此,当您请求一个对象而GC没有收集到该对象时,db4o将返回同一个对象。

只是为了确保:这意味着我不能在元数据和子对象之间使用某种神奇的关系,例如查找此列表中的所有项?据我所知,没有这样的事情。我认为建造这样的东西是可能的。但我还没试过呢。其思想是实现一个表示这种引用的db4o感知类。通过一些巧妙的回调和激活技巧,您可以实现它。