java中为什么我们要慎用递归
2016-05-22 21:02
405 查看
在平常的开发中,我们要慎用递归,一般情况下,能用递归实现的功能的,在java中都可以用其他的方式实现,那么为什么能?下面根据我在网上查询的资料,简单解释下:
java的内存分配主要是由堆和栈分配,堆是线程共有的内存空间,栈是线程私有的,栈的内存回收一般就是随着线程的生而生,亡而亡,递归的使用导致的问题恰好就是跟栈内存有关系的;当一个方法被调用的时候,会产生一些跟这个方法相关的信息,例如:方法名,参数,中间变量等等,这些东东是叫做栈帧的,当一个方法执行完毕的时候,这个栈帧才会从栈顶pop掉,使用递归的时候,会一直往栈内存里push栈帧,而java栈内存是有一定的大小限制的,超过栈内存大小的时候,程序就会出现栈异常的异常了。所以在正常的开发过程中尽量禁用递归。
再多说两句,出现无限循环的时候也可能会导致栈溢出的异常。。
java的内存分配主要是由堆和栈分配,堆是线程共有的内存空间,栈是线程私有的,栈的内存回收一般就是随着线程的生而生,亡而亡,递归的使用导致的问题恰好就是跟栈内存有关系的;当一个方法被调用的时候,会产生一些跟这个方法相关的信息,例如:方法名,参数,中间变量等等,这些东东是叫做栈帧的,当一个方法执行完毕的时候,这个栈帧才会从栈顶pop掉,使用递归的时候,会一直往栈内存里push栈帧,而java栈内存是有一定的大小限制的,超过栈内存大小的时候,程序就会出现栈异常的异常了。所以在正常的开发过程中尽量禁用递归。
再多说两句,出现无限循环的时候也可能会导致栈溢出的异常。。
相关文章推荐
- springmvc
- java编解码技术,json序列化与二进制序列化
- java 多线程总结
- eclipe的安装与使用
- Java 8 特性 – 终极手册
- spring
- java笔记之面向对象,构造,继承
- 多线程 - 线程池的实现
- java:final和static初学
- Struts2_表单标签
- java内存分配问题初学
- 《树》——二叉树(Java)
- 关于java中Matcher类的find()之用法探究
- java设计模式——单例设计模式
- hibernate +spring sessionfactory 配置
- Java23种设计模式分类
- Spring 父类bean中的static属性值继承至子类bean中
- java中图形化用户界面之布局管理器
- 5月21日 JavaScrip应用t练习
- spring mvc处理静态资源