Java把內存劃分成兩種:一種是棧內存,一種是堆內存。
在函數中定義的一些基本類型的變量和對象的引用變量都在函數的棧內存中分配。
堆內存用來存放由new創建的對象和數組。
在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。
看到這樣的定義時,理解會有多少? 這個例子可能會幫你更好的理解:
public void bizDeal(String para) throws Exception{
String a = ""; //具體這裏的數據被動從隊列中獲得。
if(StringUtils.isNotBlank(a)){
deal(); //處理
}else{
bizDeal(null);
}
}
就這麼點代碼,如果a 中的數據是由一個服務不間斷提供,如果數據一直爲null,那麼程序很快會因爲棧耗盡而死亡。
這類問題的根源就是頻繁的調用函數本身,佔用棧資源。解決辦法:
public void bizDeal(String para) throws Exception{
while(true){
String a = ""; //具體這裏的數據主動從隊列中獲得。
if(StringUtils.isNotBlank(a)){
deal(); //處理
}else{
continue;
}
}
}