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

月费$389,RackNerd美国大硬盘独立服务器

这次RackNerd商家提供的美国大硬盘独立服务器,数据中心位于洛杉矶multacom,可选Windows、Linux镜像系统,默认内存是64GB,也可升级至128GB内存,而且硬盘采用的是256G SSD系统盘+10个16TSAS数据盘,端口提供的是1Gbps带宽,每月提供200TB,且包含5个IPv4,如果有需要更多IP,也可以升级增加。CPU核心内存硬盘流量带宽价格选择2XE5-2640V2...

可抵御99%的攻击中国单域版cdn:9元/月7T防御 cloudsecre

官方网站:点击访问CDN客服QQ:123008公司名:贵州青辞赋文化传媒有限公司域名和IP被墙封了怎么办?用cloudsecre.com网站被攻击了怎么办?用cloudsecre.com问:黑客为什么要找网站来攻击?答:黑客需要找肉鸡。问:什么是肉鸡?答:被控的服务器和电脑主机就是肉鸡。问:肉鸡有什么作用?答:肉鸡的作用非常多,可以用来干违法的事情,通常的行为有:VPN拨号,流量P2P,攻击傀儡,...

云步云72.5元/月起云服务器,香港安畅/葵湾/将军澳/沙田/大浦CN2机房,2核2G5M

云步云怎么样?云步云是创建于2021年的品牌,主要从事出售香港vps、美国VPS、日本VPS、香港独立服务器、香港站群服务器等,机房有香港、美国、日本东京等机房,目前在售VPS线路有CN2+BGP、CN2 GIA,香港的线路也是CN2直连大陆,该公司旗下产品均采用KVM虚拟化架构。目前,云步云提供香港安畅、沙田、大浦、葵湾、将军澳、新世界等CN2机房云服务器,2核2G5M仅72.5元/月起。点击进...

stackoverflowerror为你推荐
weakhashmapjava中几种Map在什么情况下使用,并简单介绍原因及原理webcrack我用WebCrack4 在破解路由器密码的时候为什么在破解密码的中途自动关闭掉layout_gravityandroid 布局中 为什么能够通过android:layout_above 、android:layout_alignTop 、等 还要在之前加入arc是什么意思arctanx等于什么?天融信防火墙天融信下一代防火墙有那些特点和优势?调度系统生产调度系统保留两位有效数字什么叫保留两位有效数字欢迎页面怎样取消“欢迎页面”?imqq官网如何伸请QQ?弹幕网站求弹幕网邀请码!
yaokan永久域名经常更换 vps侦探 域名备案只选云聚达 草根过期域名 diahosting vmsnap3 NetSpeeder 全能主机 租空间 免费个人空间 谁的qq空间最好看 hkt 免费网页空间 web服务器是什么 中国电信网络测速 云服务器比较 日本代理ip nnt 贵州电信 ncp 更多