带有MongoDb驱动程序的Open Shift容器中的Java内存堆空间问题
下面是Java语法在调用Mongodb数据库中的数据时在Openshift中抛出Java内存堆问题。有没有办法知道内存泄漏发生在哪里。如果我们对每个流使用Java 8而不是循环使用Java 8,内存是否会减少。有谁能帮我对Pojo类中的每个synatx使用Java 8。下面是数量波乔班。或者任何其他建议也可以减少太多请求的内存带有MongoDb驱动程序的Open Shift容器中的Java内存堆空间问题,java,mongodb,spring-boot,Java,Mongodb,Spring Boot,下面是Java语法在调用Mongodb数据库中的数据时在Openshift中抛出Java内存堆问题。有没有办法知道内存泄漏发生在哪里。如果我们对每个流使用Java 8而不是循环使用Java 8,内存是否会减少。有谁能帮我对Pojo类中的每个synatx使用Java 8。下面是数量波乔班。或者任何其他建议也可以减少太多请求的内存 public String getAmountDetails( @RequestParam("system") @Valid String syste
public String getAmountDetails( @RequestParam("system") @Valid String system,
@RequestParam("Claims") BigDecimal Claims,
@RequestParam("Bills") BigDecimal totalOfCommissions,
@RequestParam("taxes") BigDecimal totalOfSurcharges,
@RequestParam("userDetails") BigDecimal userDetails,
) throws Exception {
Query Query = new Query();
if (system != null && !system.isEmpty())
Query.addCriteria(Criteria.where("system").is(system));
List<Amount> amount = new ArrayList<>();
amount = mongoOps.find(Query, Amount.class);
amount.addAll(Amount);
totalAmount = new Amount();
if (Amount.isEmpty()) {
totalAmount.setSystem(system);
totalAmount.setClaims(BigDecimal.ZERO);
totalAmount.setBillsBigDecimal.ZERO);
totalAmount.setTaxes(BigDecimal.ZERO);
totalAmount.setuserDetails(BigDecimal.ZERO);
totalAmount.setStatus("Success");
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(totalAmount);
}
BigDecimal claims = new BigDecimal(0);
BigDecimal bills = new BigDecimal(0);
BigDecimal taxes = new BigDecimal(0);
BigDecimal userDeatils = new BigDecimal(0);
for (Amount amount : getAmount) {
if (null != amount.getClaims()) {
claimsAmt = claimsAmt.add(amount.getclaimsAmt().bigDecimalValue());
}
if (null != amount.getBillsAmt()) {
billslAmt = billsAmt.add(amount.getBillsAmt().bigDecimalValue());
}
if (null != amount.gettaxesAmt()) {
taxesAmt = taxesAmt.add(amount.getTaxesAmt().bigDecimalValue());
}
totalAmount.setClaims(claimsAmt);
totalAmount.setbills(billsAmt);
totalAmount.settaxesAmt(taxesAmt);
}
}
public String getAmountDetails(@RequestParam(“system”)@有效字符串系统,
@RequestParam(“索赔”)BigDecimal索赔,
@RequestParam(“账单”)大十进制调试总数,
@RequestParam(“taxes”)来源的大十进制总数,
@RequestParam(“userDetails”)BigDecimal userDetails,
)抛出异常{
查询=新查询();
if(system!=null&&!system.isEmpty())
Query.addCriteria(Criteria.where(“system”).是(system));
列表金额=新建ArrayList();
amount=mongoOps.find(查询,amount.class);
amount.addAll(金额);
totalAmount=新金额();
if(Amount.isEmpty()){
总金额。设置系统(系统);
totalAmount.setClaims(BigDecimal.ZERO);
总金额(setBillsBigDecimal.0);
totalAmount.setTaxes(BigDecimal.ZERO);
totalAmount.setuserDetails(BigDecimal.ZERO);
totalAmount.setStatus(“成功”);
返回mapper.writerWithDefaultPrettyPrinter().writeValueAsString(totalAmount);
}
BigDecimal声明=新的BigDecimal(0);
BigDecimal票据=新的BigDecimal票据(0);
BigDecimal税=新的BigDecimal(0);
BigDecimal userDeatils=新的BigDecimal(0);
对于(金额:getAmount){
if(null!=amount.getClaims()){
claimsAmt=claimsAmt.add(amount.getclaimsAmt().bigDecimalValue());
}
if(null!=amount.getBillsAmt()){
billslAmt=billsAmt.add(amount.getBillsAmt().bigDecimalValue());
}
if(null!=amount.gettaxesAmt()){
taxesAmt=taxesAmt.add(amount.getTaxesAmt().bigDecimalValue());
}
索赔总额(索赔);
总金额(美元);
totalAmount.settaxesAmt(taxesAmt);
}
}
首先-您的foreach循环是正常的,除了您没有显示您正在迭代的getAmount
之外。所以假设这是一个打字错误
基本上,您要求mongo根据一些标准为您提供所有“Amount”对象,所有这些只是为了计算一些值的总和
如果数据库中有多个对象,这将是:
- 慢
- 内存消耗
$sum
阅读,因为他们提供了一个如何在mongo中完成类似任务的示例
此外,您还可以阅读更为复杂的示例
这里有一个to mongo文档,也很方便