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

如何低价香港服务器购买?有没有便宜的香港服务器推荐?

如何低价香港服务器购买?想要做一个个人博客,想用香港服务器,避免繁琐备案,性能不需要多高,只是记录一些日常而已,也没啥视频之类的东西,想问问各位大佬有没有低价的香港服务器推荐?香港距大陆近,相比美国服务器最大的优势在于延迟低,ping值低,但是带宽紧张,普遍都是1M,一般戏称其为“毛细血管”。同时价格普遍高,优质稳定的一般价格不菲。大厂云梯队阿里云、腾讯云两家都有香港服务器,要注意的是尽量不要选择...

Megalayer优化带宽和VPS主机主机方案策略 15M CN2优化带宽和30M全向带宽

Megalayer 商家主营业务是以独立服务器和站群服务器的,后来也陆续的有新增香港、菲律宾数据中心的VPS主机产品。由于其线路的丰富,还是深受一些用户喜欢的,有CN2优化直连线路,有全向国际线路,以及针对欧美的国际线路。这次有看到商家也有新增美国机房的VPS主机,也有包括15M带宽CN2优化带宽以及30M带宽的全向线路。Megalayer 商家提供的美国机房VPS产品,提供的配置方案也是比较多,...

无忧云-河南洛阳BGP,CEPH集群分布式存储,数据安全可靠,活动期间月付大优惠!

 无忧云怎么样?无忧云服务器好不好?无忧云值不值得购买?无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点...

stackoverflowerror为你推荐
图片地址怎么获得图片地址jdk6Java 中的 JDK 6 Update 6 到哪下载啊 ? 有一点急保留两位有效数字什么叫保留两位有效数字有b吗34B的胸围有多大?imqq官网中国v家官网网址mediasres什么意思中科红旗北京中科红旗软件技术有限公司的介绍中科红旗Linux完全开源吗?中科红旗破产,对Linux有影响吗?基础设施即服务基础设施、 产品服务、 财务和 () 这几个问题是商业模式设计需要去主要解决的。疫苗之王被称为免疫之王的产品
美国域名注册 cn域名价格 ddos 台湾服务器 godaddy续费优惠码 云全民 帽子云 国外免费全能空间 hostloc 免费美国空间 卡巴斯基免费试用版 中国电信测速网站 百度云空间 ledlamp 深圳域名 可外链的相册 阿里dns 腾讯数据库 asp空间 网站防护 更多