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;
}
}
}