java.lang.StackOverflowError: null
private List<SysRegionEntity> queryValidSysRegionList(String regionId,
List<SysRegionEntity> sysRegionList, List<SysRegionEntity> validSysRegionList) {
for (SysRegionEntity sysRegionEntity : sysRegionList) {
if(null != sysRegionEntity.getpId()){
if(sysRegionEntity.getpId().equals(regionId)){
validSysRegionList.add(sysRegionEntity);
queryValidSysRegionList(sysRegionEntity.getRegionId(), sysRegionList, validSysRegionList);
}
}
}
}
迭代的方法:返回值为List<SysRegionEntity>时,死循环,出现这种错误
private void queryValidSysRegionList(String regionId,
List<SysRegionEntity> sysRegionList, List<SysRegionEntity> validSysRegionList) {
for (SysRegionEntity sysRegionEntity : sysRegionList) {
if(null != sysRegionEntity.getpId()){
if(sysRegionEntity.getpId().equals(regionId)){
validSysRegionList.add(sysRegionEntity);
queryValidSysRegionList(sysRegionEntity.getRegionId(), sysRegionList, validSysRegionList);
}
}
}
}
方案:将返回值变为void即可,或者给返回值。
原因:这主要是迭代本身就是比较占用内存,而每次有返回值占用过多的虚拟机内存,且没有返回值,造成死循环,导致内存溢出。因此将返回值变为void。