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参数增加线程栈大小。

HostKvm:香港国际/韩国KVM夏季7折,2G内存套餐月付5.95美元起

HostKvm是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。目前商家发布了夏季特别促销活动,针对香港国际/韩国机房VPS主机提供7折优惠码,其他机房全场8折,优惠后2GB内存套餐月付5.95美元起。下面分别列出几款主机套餐配置信息。套餐:韩国KR...

腾讯云轻量应用服务器关于多个实例套餐带宽

腾讯云轻量应用服务器又要免费升级配置了,之前已经免费升级过一次了(腾讯云轻量应用服务器套餐配置升级 轻量老用户专享免费升配!),这次在上次的基础上再次升级。也许这就是良心云吧,名不虚传。腾讯云怎么样?腾讯云好不好。腾讯云轻量应用服务器 Lighthouse 是一种易于使用和管理、适合承载轻量级业务负载的云服务器,能帮助个人和企业在云端快速构建网站、博客、电商、论坛等各类应用以及开发测试环境,并提供...

tmhhost:全场VPS低至6.4折,香港BGP200M日本软银美国cn2 gia 200G高防美国三网cn2 gia韩国CN2

tmhhost放出了2021年的端午佳节+618年中大促的优惠活动:日本软银、洛杉矶200G高防cn2 gia、洛杉矶三网cn2 gia、香港200M直连BGP、韩国cn2,全都是高端优化线路,所有这些VPS直接8折,部分已经做了季付8折然后再在此基础上继续8折(也就是6.4折)。 官方网站:https://www.tmhhost.com 香港BGP线路VPS ,200M带宽 200M带...

stackoverflowerror为你推荐
有道云笔记网页版win10怎么用有道云笔记网页google邮箱注册怎样创建google邮箱md5值游戏安装包的MD5值怎么用?知识库管理系统销售易CRM知识库,这是干什么用的?qq注册账号用QQ注册有几种方法?tvos智能电视都什么功能被广电封杀了?天融信防火墙都说天融信的产品不错,那天融信的下一代防火墙真的是当今最好的防火墙产品了吗?天融信防火墙天融信下一代防火墙有那些特点和优势?调度系统操作系统中为什么需要调度?smartupload使用SmartUpload实现文件上传时需要对表单设置哪些属性
互联网域名管理办法 openv 大硬盘 标准机柜尺寸 国外php空间 免费ftp站点 卡巴斯基永久免费版 169邮箱 卡巴斯基破解版 江苏双线服务器 东莞服务器托管 摩尔庄园注册 云服务是什么意思 服务器硬件配置 免备案cdn加速 杭州电信宽带 wordpress空间 贵州电信 香港博客 godaddy退款 更多