stackoverflowerrorJava-java产生StackOverflowError的原因是什么

stackoverflowerror  时间:2021-07-01  阅读:()

递归累加时,出java.lang.StackOverflowError了,怎么办?

这么递归下去肯定会栈溢出。

如果单纯的想要1-10000的累加至于这么麻烦么? 累加的效率问题: 目前有下面两种方法: 方法一: long sum = 0; for(int i = 0;i < value;i++) { sum += i; } 方法二: long sum = 0; sum = (value + 1) * value / 2; 当value值等于10000,使用方法一,运行10次有4次会产生15毫秒左右耗时,使用方法二,运行10次无耗时产生。

当value值等于100000,使用方法一,运行10次有5次会产生15毫秒左右耗时,使用方法二,运行10次无耗时产生。

当value值等于1000000,使用方法一,运行10次有10次会产生31毫秒左右耗时,使用方法二,运行10次无耗时产生。

...... 以此类推,方法一累加计数的效率和方法二相比,随着value值的级数递增,效率相应下降。

测试代码: public class SimpleArithmetic { public static void main(String[] args) { SimpleArithmetic sa = new SimpleArithmetic(); long sum = 0; long time = 0; long curTime = System.currentTimeMillis(); System.out.println("curTime=" + curTime); //sum = sa.getSumCycle(1000000); sum = sa.getSumNotCycle(1000000); System.out.println(sum); long endTime = System.currentTimeMillis(); System.out.println("endTime=" + endTime); time = endTime - curTime; System.out.println(time); } private long getSumCycle(long value) { long sum = 0; for(long i = 1;i <= value;i++) { sum += i; } return sum; } private long getSumNotCycle(long value) { long sum = 0; sum = (value + 1) * value / 2; return sum; } }

求助关于java的StackOverflowError错误怎么改

public double getSpeed(){
return getSpeed();
}
无限的循环递归自身方法,你这样子不溢出才怪,应该是

public double getSpeed(){
return speed;
}

其它的那些return方法也要改。


java.lang.StackOverflowError怎么个处理,什么原因

这是因为你的内存不足导致栈溢出了.解决办法首先看你的代码找一找有没有递归调用的地方死循环了,往往递归调用死循环就会造成这个原因.另外也有可能是因为jvm内存不足导致的,加大你的jvm所占用的内存,

Java-java产生StackOverflowError的原因是什么

Java常见的几种内存溢出及解决方法【情况一】: java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: -Xms3062m -Xmx3062m 【情况二】 java.lang.OutOfMemoryError:GCoverheadlimitexceeded 【解释】:JDK6新增错误类型,当GC为释放很小空间占用大量时间时抛出;一般是因为堆太小,导致异常的原因,没有足够的内存。

【解决方案】: 1、查看系统是否有使用大内存的代码或死循环; 2、通过添加JVM配置,来限制使用内存: -XX:-UseGCOverheadLimit 【情况三】: java.lang.OutOfMemoryError:PermGenspace:这种是P区内存不够,可通过调整JVM的配置: -XX:MaxPermSize=128m -XXermSize=128m 【注】: JVM的Perm区主要用于存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace,这个区域成为年老代,GC在主程序运行期间不会对年老区进行清理,默认是64M大小,当程序需要加载的对象比较多时,超过64M就会报这部分内存溢出了,需要加大内存分配,一般128m足够。

【情况四】: java.lang.OutOfMemoryError:Directbuffermemory 调整-XX:MaxDirectMemorySize=参数,如添加JVM配置: -XX:MaxDirectMemorySize=128m 【情况五】: java.lang.OutOfMemoryError:unabletocreatenewnativethread 【原因】:Stack空间不足以创建额外的线程,要么是创建的线程过多,要么是Stack空间确实小了。

【解决】:由于JVM没有提供参数设置总的stack空间大小,但可以设置单个线程栈的大小;而系统的用户空间一共是3G,除了Text/Data/BSS/MemoryMapping几个段之外,Heap和Stack空间的总量有限,是此消彼长的。

因此遇到这个错误,可以通过两个途径解决:1.通过-Xss启动参数减少单个线程栈大小,这样便能开更多线程(当然不能太小,太小会出现StackOverflowError);2.通过-Xms-Xmx两参数减少Heap大小,将内存让给Stack(前提是保证Heap空间够用)。

【情况六】: java.lang.StackOverflowError 【原因】:这也内存溢出错误的一种,即线程栈的溢出,要么是方法调用层次过多(比如存在无限递归调用),要么是线程栈太小。

【解决】:优化程序设计,减少方法调用层次;调整-Xss参数增加线程栈大小。

日本美国站群服务器raksmart站群新增,限量低至月1.99美元

RAKsmart 商家八月份的促销活动今天更新。基本上和上个月的产品套餐活动差不多的,不过也是有简单的微调。对于RAKsmart商家还是比较了解的,他们家产品虽然这两年增加多个机房,以及在VPS主机方案上有丰富的机房和调整到一些自营机房,他们家的策划能力还是有限,基本上每个月的套餐活动都差不多。RAKsmart 在八月份看到有新增香港高防服务器可选,最高100GB防御。同时原来上个月缺货的日本独立...

Linode十八周年及未来展望

这两天Linode发布了十八周年的博文和邮件,回顾了过去取得的成绩和对未来的展望。作为一家运营18年的VPS主机商,Linode无疑是有一些可取之处的,商家提供基于KVM架构的VPS主机,支持随时删除(按小时计费),可选包括美国、英国、新加坡、日本、印度、加拿大、德国等全球十多个数据中心,所有机器提供高出入网带宽,最低仅$5/月($0.0075/小时)。This month marks Linod...

快云科技:夏季大促销,香港VPS7.5折特惠,CN2 GIA线路; 年付仅不到五折巨惠,续费永久同价

快云科技怎么样?快云科技是一家成立于2020年的新起国内主机商,资质齐全 持有IDC ICP ISP等正规商家。我们秉承着服务于客户服务于大众的理念运营,机器线路优价格低。目前已注册用户达到5000+!主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机!产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国...

stackoverflowerror为你推荐
ipv6无网络访问权限WIN7本地连接,IPV4和IPV6无网络访问权限怎么解决策略组组策略是什么,命令是什么???溢出隐藏overflow:hidden:溢出隐藏了。mindmanager破解版求mindmanager 2019 的注册机deviceidAndroid里DeviceId和AndroidId都是什么意思?天融信防火墙天融信下一代防火墙有那些特点和优势?欢迎页面如何设置电脑的欢迎界面?layoutsubviews如何设置plus.nativeui.toast的样式什么是句柄按键精灵的句柄是什么?新手怎么制作表格怎么制作表格?
虚拟主机99idc 根域名服务器 双线主机租用 老左 电信测速器 bbr 国外idc seovip 一元域名 合肥鹏博士 免费个人空间申请 股票老左 南通服务器 qq云端 服务器硬件防火墙 新世界服务器 免费mysql数据库 web服务器搭建 服务器论坛 九零网络 更多