spring data mongodb可能存在内存泄漏

spring data mongodb可能存在内存泄漏,mongodb,memory-leaks,spring-data,spring-data-mongodb,Mongodb,Memory Leaks,Spring Data,Spring Data Mongodb,我认为spring data mongodb内存泄漏。 基本上,我们使用MongoDB作为RDBMS的一种缓存,因此当应用程序启动时,我们加载数据库的一大块。 因此,基本上,我们正在使用不同的“映射”方法将不同的JPA实体映射/非规范化到Mongo文档,例如: @Override public void insertFromContacts(Set<Contact> contacts, Long seed){ MutableLong sfId = n

我认为spring data mongodb内存泄漏。 基本上,我们使用MongoDB作为RDBMS的一种缓存,因此当应用程序启动时,我们加载数据库的一大块。 因此,基本上,我们正在使用不同的“映射”方法将不同的JPA实体映射/非规范化到Mongo文档,例如:

    @Override
    public void insertFromContacts(Set<Contact> contacts, Long seed){ 
        MutableLong sfId = new MutableLong(seed);

        List<SocialInfo> socialInfos = contacts.stream().map(c -> {
            SocialInfo socialInfo = new SocialInfo();              
            socialInfo.setId(sfId.longValue());
            socialInfo.setSearchOnly(true);
            socialInfo.setStatus(null);
            socialInfo.setContactId(c.getId());
            sfId.increment();
            return socialInfo;
        }).collect(Collectors.toList());

        mongoTemplate.insertAll(socialInfos);
    }
@覆盖
public void insertFromContacts(设置联系人,长种子){
MutableLong sfId=新的MutableLong(种子);
List socialinfo=contacts.stream().map(c->{
SocialInfo-SocialInfo=新的SocialInfo();
setId(sfId.longValue());
socialInfo.setSearchOnly(真);
socialInfo.setStatus(空);
setContactId(c.getId());
sfId.increment();
返回社交信息;
}).collect(Collectors.toList());
mongoTemplate.insertAll(社会信息);
}
但是内存并没有停止增长,所以我进行了堆转储,我意识到spring在内存中保留了大量的BasicDBObject引用,我不知道为什么?

当检查到累积点的最短路径时,它显示这显然是类的earlyApplicationEvents属性

我正在使用: -爪哇8 -Spring数据mongodb 1.10.8.1发布 -Spring数据共享1.13.8.1版本 -弹簧4.3.6.释放


想知道为什么吗?

如果您跟踪字段
earlyApplicationEvents
的使用情况,它基本上是用于在启动期间保留事件,直到可以注册侦听器,此时它将设置为
null
。请看这里:

您提到您在启动时进行处理,所以我想这会阻止侦听器注册,直到您的过程完成


如果将该初始化代码向后移动,直到应用程序上下文完全初始化之后,这应该可以解决该问题。例如,注册一个事件侦听器并对
ContextRefreshedEvent
做出反应应该可以做到这一点。重要的一点是在调用刷新过程后进行更新。

这听起来与您给出的版本类似,但应该是固定的。您是对的,初始化发生得太快了;非常感谢。