java.lang.classStackOverFlowError 怎么解决 具体点

今天在使用maven打包项目的时候,报了以下异常:
[ERROR] error: java.lang.StackOverflowError
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5365)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5472)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5480)
at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:644)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698)
看到这个异常的第一反应,就是检查代码中是否有大量的递归调用,结果发现就是没有。
然后想到的是JVM默认的栈大小,于是想修改JVM参数,这个参数可以在maven的pom.xml文件中进行配置,如下:
&org.scala-tools&
&maven-scala-plugin&
&testCompile&
&${scala.version}&
&-target:jvm-1.8&
&-Xss2048K&
其中,以下片段为修改栈大小:
&-Xss2048K&
重新打包,问题解决。
本文已收录于以下专栏:
相关文章推荐
java 异常处理
严重: Exception initializing page context
java.lang.StackOverflowError
at javax.servlet.http.HttpSer...
在Hibernate一对多映射中,两个实体都重写了toString()方法,,应用程序递归太深了,所以发生了堆栈溢出。解决方法就是将多的一方对象里面重写的toString方法去掉,或者两个对象里面重写...
做毕设出现一个java.lang.StackOverflowError异常。弄了半天,又是问高手,又是查资料的。最后发现,解决问题啦!特记录下来!
StackOverflowError是由于当前...
作者:disappearedgod
文章出处:http://blog.csdn.net/disappearedgod/article/details/
1、stackoverflow:每当java程序启动一个新的线程时,java虚拟机会为他分配一个栈,java栈以帧为单位保持线程运行状态;当线程调用一个方法是,jvm压入一个新的栈帧到这个线程的栈中,...
JUnit Test的时候出现了这个栈溢出的错误,如下图。
    StackOverflowError,虚拟机栈和本地方法栈溢出。
    关于虚拟机栈和本地方法栈,在
Java 虚拟机规范...
org.apache.maven.plugins
                maven-compiler-plugin
 &#16...
问题1.maven install时出现,日志如下:系统资源不足。有关详细信息,请参阅以下堆栈追踪。java.lang.OutOfMemoryError: Java heap space       ...
最近做项目出现一个java.lang.StackOverflowError异常。弄了半天,又是问高手,又是查资料的。最后发现,解决问题啦!特记录下来!
StackOverflowError是由于...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)1512人阅读
java(35)
严重:&Exception&initializing&page&context
java.lang.StackOverflowError
at&javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at&org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at&javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at&org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at&javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at&org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at&javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at&org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at&javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at&org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at&javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
在Eclipse中JDK的配置中加上&&&-XX:MaxDirectMemorySize=128 &就行了,默认是64M,增大一倍,还不行的话,就用256吧,
还不行的话,估计就是程序里头有死循环,或递归调用没写好了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24882次
排名:千里之外
原创:21篇
转载:21篇
(1)(4)(5)(16)(2)(14)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'网上搜索了一下,关于java的线程栈:
JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.
JVM的内存,被划分了很多的区域: (来源:/topic/808550)
1.程序计数器
每一个Java线程都有一个程序计数器来用于保存程序执行到当前方法的哪一个指令。
线程的每个方法被执行的时候,都会同时创建一个帧(Frame)用于存储本地变量表、操作栈、动态链接、方法出入口等信息。每一个方法的调用至完成,就意味着一个帧在VM栈中的入栈至出栈的过程。如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果VM栈可以动态扩展(VM Spec中允许固定长度的VM栈),当扩展时无法申请到足够内存则抛出OutOfMemoryError异常。
3.本地方法栈
每个线程的栈都是该线程私有的,堆则是所有线程共享的。当我们new一个对象时,该对象就被分配到了堆中。但是堆,并不是一个简单的概念,堆区又划分了很多区域,为什么堆划分成这么多区域,这是为了JVM的内存垃圾收集,似乎越扯越远了,扯到垃圾收集了,现在的jvm的gc都是按代收集,堆区大致被分为三大块:新生代,旧生代,持久代(虚拟的);新生代又分为eden区,s0区,s1区。新建一个对象时,基本小的对象,生命周期短的对象都会放在新生代的eden区中,eden区满时,有一个小范围的gc(minor gc),整个新生代满时,会有一个大范围的gc(major gc),将新生代里的部分对象转到旧生代里。
其实就是永久代(Permanent Generation),方法区中存放了每个Class的结构信息,包括常量池、字段描述、方法描述等等。VM Space描述中对这个区域的限制非常宽松,除了和Java堆一样不需要连续的内存,也可以选择固定大小或者可扩展外,甚至可以选择不实现垃圾收集。相对来说,垃圾收集行为在这个区域是相对比较少发生的,但并不是某些描述那样永久代不会发生GC(至 少对当前主流的商业JVM实现来说是如此),这里的GC主要是对常量池的回收和对类的卸载,虽然回收的&成绩&一般也比较差强人意,尤其是类卸载,条件相当苛刻。
&Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量表(constant_pool table),用于存放编译期已可知的常量,这部分内容将在类加载后进入方法区(永久代)存放。但是Java语言并不要求常量一定只有编译期预置入Class的常量表的内容才能进入方法区常量池,运行期间也可将新内容放入常量池(最典型的String.intern()方法)。
今天研究了一下 java 的线程栈,写了一段代码用于测试:
public&class&Test
&&&&byte[] data =&new&byte[8192];
&&&&public&static&void&main(String[] args)
&&&&&&&&if(args.length ==&0)
&&&&&&&&&&&&System.out.println("确少参数, 正确的命令: java Test &数字&");
&&&&&&&&&&&&System.exit(0);
&&&&&&&&int&x = Integer.parseInt(args[0]);
&&&&&&&&//这里不论申请多大的空间,都不会抛出 java.lang.StackOverflowError
&&&&&&&&byte[] data =&new&byte[2048];
&&&&&&&&//递归的次数与 线程栈 以及 java.lang.StackOverflowError 有直接关系
&&&&&&&&System.err.println("dg("&+ x +&") = "&+ dg(x));
&&&&//递归测试
&&&&private&static&int&dg(int&x)
&&&&&&&&//测试发现这里申明的变量数与线程栈以及java.lang.StackOverflowError有直接关系&&&&&&
&&&&&&&&int&a =&1;
&&&&&&&&int&b =&2;
&&&&&&&&//这里不论申请多大的空间,都不会抛出 java.lang.StackOverflowError&&&&&&&
&&&&&&&&byte[] data =&new&byte[2048];
&&&&&&&&if(x &&1)
&&&&&&&&&&&&return&x + dg(--x);
&&&&&&&&else
&&&&&&&&&&&&return&x;
C:\test&java -Xms8M -Xmx8M -Xss1K Test 600
dg(600) = 180300
C:\test&java -Xms8M -Xmx8M&-Xss1K&Test&700
Exception in thread "main" java.lang.StackOverflowError
& & & & at Test.dg(Test.java:26)
& & & & at Test.dg(Test.java:34)
& & & & at Test.dg(Test.java:34)
& & & & at Test.dg(Test.java:34)
阅读(...) 评论()
友情链接:compile: java.lang.StackOverflowError
今天在服务器上运行本机运行正常的Play framwork 2.0 的项目,出现如下错误
[info] Compiling 25 Scala sources and 1
source to /home/admin/git/project/ &
& & & target/scala-2.9.1/classes... &
[error] {file:/home/admin/git/project/}project/compile: &
& & & compile: java.lang.StackOverflowError &
[error] Total time: 19 s, completed
15:35:14 &
google一下,原因大多是conf/routes文件太大了(大约200行以上)所致,通过命令
export _JAVA_OPTIONS=&-Xms64m -Xmx1024m -Xss2m& &
即可解决,但是我的routes不过几十行,才1k多大,显然不是造成上述bug的原因。
后来发现/usr/local/bin/sbt文件内 -Xss 512K ,于是改为 -Xss 2M,运行正常,完整代码为
java -Xms512M -Xmx1536M -Xss512K -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar &$@& &}

我要回帖

更多关于 java.lang.string 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信