遇見內(nèi)存溢出問題—jvm
問題描述
`
Handler dispatch failed; nested exception is java.lang.StackOverflowError
原因分析:
提示:StackOverflowError棧內(nèi)存溢出
StackOverflowError 是一個java中常出現(xiàn)的錯誤:在jvm運行時的數(shù)據(jù)區(qū)域中有一個java虛擬機棧,當執(zhí)行java方法時會進行壓棧彈棧的操作。在棧中會保存局部變量,操作數(shù)棧,方法出口等等。jvm規(guī)定了棧的最大深度,當執(zhí)行時棧的深度大于了規(guī)定的深度,就會拋出StackOverflowError錯誤。
private List<String> getChildPositionIds(String id,List<String> ids) {
List<Position> positions = dao.getChildPositionByPId(id);
if(CollUtil.isNotEmpty(childPositions)) {//遞歸方法出口
positions.stream().forEach(childPosition -> {
String cId = childPosition.getId();
ids.add(childId);
//遞歸調(diào)用
this.getChildPositionIds(cId, ids);
});
}
return ids;
}
解決方案:
提示:遞歸進入死循環(huán)了,找到死循環(huán)位置修改(我這里是遞歸方法出現(xiàn)死循環(huán)問題,不作詳細說明,結(jié)合自己代碼看問題)
嘗試增加堆棧大?。ú唤ㄗh這樣做,找到問題才能解決好問題,才是關(guān)鍵)
總結(jié):調(diào)用自己,無限遞歸,棧當然會溢出,所以一般情況下是排查遞歸方法中問題,或者是數(shù)據(jù)問題有可能數(shù)據(jù)有依賴(比如:崗位添加下級不能選擇該崗位上級來添加,會形成閉環(huán)(用數(shù)據(jù)關(guān)系parent_id來實現(xiàn)),這種屬于數(shù)據(jù)之間的關(guān)系或者說邏輯關(guān)系造成的)。也有其他的,暫時沒遇到文章來源:http://www.zghlxwxcb.cn/news/detail-611281.html
或者:
錯誤實現(xiàn)的遞歸(即沒有終止條件)
類之間的循環(huán)依賴關(guān)系
在同一個類中實例化一個類作為該類的實例變量文章來源地址http://www.zghlxwxcb.cn/news/detail-611281.html
到了這里,關(guān)于Handler dispatch failed; nested exception is java.lang.StackOverflowError 錯誤的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!