Spring boot crudrepository内存使用情况

时间:2017-04-18 08:15:28

标签: spring spring-boot spring-data-jpa

我正在使用Spring的spring-boot-starter-data-jpa maven依赖项来自动生成我们的存储库并且没有进行额外的调整 - 我的存储库现在看起来都像:

public interface AssetTripRepository extends CrudRepository<Asset, String> {

}

在调用类中,我按如下方式注入存储库:

@Autowired
public CacheService(final AssetTripRepository assetTripRepository) {
    this.assetTripRepository = assetTripRepository;
}

然后使用它:

for (final Asset asset : assets) {
    final ArrayList<AssetTrips> assetTrips = //call to service
    assetTripRepository.save(assetTrips);
}

这一切都可以工作并持久存储到数据库,但是存储库似乎没有释放对象(assetTrips),即使它们已经被保存,最终会导致内存不足。

我已经使用了VisualVM内存采样器并且可以验证所有assetTrip对象总是在堆上并且永远不会被垃圾收集,注释掉assetTripRepository上的save调用修复了这个问题并且所有assetTrips都被垃圾收集所以它只能是由于某种原因,存储库保留了这些引用。

我希望在循环通过资产的每次迭代之后,assetTrips持续被解除引用并且有资格进行垃圾收集,但这种情况并没有发生。

0 个答案:

没有答案