方法递归对性能的影响
来源:互联网 发布:人工智能 听诊器 编辑:程序博客网 时间:2024/05/01 07:34
根本原因是这样的,对于每一个线程,都有一个java栈 ,当有一个方法被调用的时候,会产生一些跟这个方法相关的信息,如方法名,参数,中间变量等等,这些叫做栈帧 ,当一个方法执行完毕 这个栈帧才会从栈顶pop掉 你递归的话 会一直向栈里push栈帧 而这个java栈是有一定的长度或深度的,当栈满了,无法再进行push的时候 就出现你上面的异常了,解决办法的话 就不要用递归操作 改用for 而且平时也不建议用递归的,效率太低了 .
栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。函数的调用过程都体现在堆栈和退栈上了。你调用构造函数的“层”太多了,以致于把栈区溢出了。
通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间。通常栈的大小是1-2MB的。通常递归也不要递归的层次过多,很容易溢出.
栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。函数的调用过程都体现在堆栈和退栈上了。你调用构造函数的“层”太多了,以致于把栈区溢出了。
通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间。通常栈的大小是1-2MB的。通常递归也不要递归的层次过多,很容易溢出.
对java.lang.StackOverflowError的分析:
原因:运行一个程序,JVM会开辟一块内存空间去储存程序进行时的某些信息,当程序运行时需要储存的信息超过了分配的空间,就会出现那样的问题.比如死循环,
解决:首先从程序代码优化方面着手,检查是否有死循环、递归等程序,如果有,修正、优化相关代码。
0 0
- 方法递归对性能的影响
- ToString()对性能的影响
- 视图对性能的影响
- synchronized 对性能的影响
- arraysize 对性能的影响
- 视图对性能的影响
- 文件系统对性能的影响
- malloc的标志对性能的影响
- static局部变量对性能的影响
- Ajax 对Web性能的影响分析
- Log4J对应用性能的影响
- Log4J对应用性能的影响
- 临时对象对软件性能的影响
- Java JVM设置对性能的影响
- 绑定变量对性能的影响
- 依赖自动统计对性能的影响
- AutoGrowth 对数据库性能的影响
- SQL对程序性能的影响
- centos7下使用gitlab+redmine+jenkins
- AdapterView(ListView)
- JAVA获取系统当前时间
- Android开发之AlarmManager的用法详解
- 2015——VLC编译
- 方法递归对性能的影响
- 头脑鲜活的程序猿,赚外快的新途径
- PHP操作MySql封装类
- Mysql按字段分组取最大值记录
- java代码实现如jsp页面的form请求方式二HttpClient
- hdu1257 最少拦截系统(最长上升子序列)
- mac下 硬破解zend studio 12.5.1
- guodingguodingguoding
- [LeedCode OJ]#191 Number of 1 Bits