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

Fiberia.io:$2.9/月KVM-4GB/50GB/2TB/荷兰机房

Fiberia.io是个新站,跟ViridWeb.com同一家公司的,主要提供基于KVM架构的VPS主机,数据中心在荷兰Dronten。商家的主机价格不算贵,比如4GB内存套餐每月2.9美元起,采用SSD硬盘,1Gbps网络端口,提供IPv4+IPv6,支持PayPal付款,有7天退款承诺,感兴趣的可以试一试,年付有优惠但建议月付为宜。下面列出几款主机配置信息。CPU:1core内存:4GB硬盘:...

GreenCloudVPS$20/年,新加坡/美国/荷兰vps/1核/1GB/30GB,NVMe/1TB流量/10Gbps端口/KVM

greencloudvps怎么样?greencloudvps是一家国外主机商,VPS数据中心多,之前已经介绍过多次了。现在有几款10Gbps带宽的特价KVM VPS,Ryzen 3950x处理器,NVMe硬盘,性价比高。支持Paypal、支付宝、微信付款。GreenCloudVPS:新加坡/美国/荷兰vps,1核@Ryzen 3950x/1GB内存/30GB NVMe空间/1TB流量/10Gbps...

LOCVPS新上日本软银线路VPS,原生IP,8折优惠促销

LOCVPS在农历新年之后新上架了日本大阪机房软银线路VPS主机,基于KVM架构,配备原生IP,适用全场8折优惠码,最低2GB内存套餐优惠后每月仅76元起。LOCVPS是一家成立于2012年的国人VPS服务商,提供中国香港、韩国、美国、日本、新加坡、德国、荷兰、俄罗斯等地区VPS服务器,基于KVM或XEN架构(推荐选择KVM),线路方面均选择国内直连或优化方案,访问延迟低,适合建站或远程办公使用。...

stackoverflowerror为你推荐
strlenstrlen()函数是什么意思?显卡挖矿啥意思挖矿是什么意思 和显卡有什么关联mdmMDM程序有什么用途?删除它对系统有没有威胁?应该怎样删除?1u1U的 定义诺诺云代账上海的亮证节有讲到诺诺云代账,产品如何?oncontextmenu鼠标右键很好用,但是左键一点反应也没有,请问是什么原因呢?网关和路由器的区别网关和路由器的具体区别在哪里呀?slideshare如何通过slideshare扩充LinkedIn人脉jqlDX5JQL8WDPMW求大神帮查下是不是行货苹果调度系统操作系统中为什么需要调度?
香港服务器租用99idc 安徽双线服务器租用 域名查询系统 bbr cve-2014-6271 gomezpeer 表格样式 windows2003iso 免费ftp空间申请 100m独享 100mbps 根服务器 备案空间 vul web应用服务器 秒杀品 双线空间 深圳域名 国外免费云空间 cdn服务 更多