栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Scala工程编译时出现stackoverflowError错误

Scala工程编译时出现stackoverflowError错误

Scala工程,随着项目越做越大(类敏捷开发,目前已经做了三年了),经常会在工程进行构建/build/compile时发生内存错误,如GC overhead limit exceeded、stackoverflowErrorなど类似的错误。

总的来说原因就是:代码越来越多,自身JVM虚拟机内存不够了呗,具体细节大家自己研究。。

error例子(项目保密原因,例子都是网上直接拷贝过来的):

!ENTRY org.scala-ide.sdt.core 4 0 2017-09-08 12:42:02.495 !MESSAGE Error in Scala compiler 
!STACK 0 
java.lang.StackOverflowError 
    at scala.tools.nsc.typechecker.Typers$Typer.checkDead(Typers.sc‌​ala:111) 
    at scala.tools.nsc.typechecker.Typers$Typer.typedSelectOrSuperC‌​all$1(Typers.scala:4‌​812) 
    at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Ty‌​pers.scala:5344) 

 第一种StackoverFlowError经常发生于在sbt compile,或者IDEA上可视化的sbt refresh project的时候,

解决办法:在file—>settings->build->buildTools->sbt->VM parameters选项上输入 -Xss4M(根据自己PC的内存和上面Xmx的大小自行调节,据传说默认是256k,建议1-4M)

如果你PC的内存够大,可以把上面的选项也改大一点(开发的电脑是24G的内存,我把JVM可使用内存设为了4098M)

 发生类似于下记GC的error,我的工程多发生于IDEA biuld/rebuild时,此时需要调整ScalaCompile的JVM内存设置

Uncaught exception when running trip_dte: java.lang.OutOfMemoryError: GC overhead limit exceeded
[error] sbt.ForkMain$ForkError: java.lang.OutOfMemoryError: GC overhead limit exceeded
[error]     at scala.collection.immutable.HashMap$HashTrieMap.updated0(HashMap.scala:358)
[error]     at scala.collection.immutable.HashMap.$plus(HashMap.scala:62)
[error]     at scala.collection.immutable.HashMap.$plus(HashMap.scala:36)
[error]     at scala.collection.mutable.MapBuilder.$plus$eq(MapBuilder.scala:29)
[error]     at scala.collection.mutable.MapBuilder.$plus$eq(MapBuilder.scala:25)
[error]     at scala.collection.generic.Growable.$anonfun$$plus$plus$eq$1(Growable.scala:59)
[error]     at scala.collection.generic.Growable$$Lambda$44/1950093417.apply(Unknown Source)
[error]     at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:32)
[error]     at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:29)
[error]     at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:38)
[error]     at scala.collection.generic.Growable.$plus$plus$eq(Growable.scala:59)
[error]     at scala.collection.generic.Growable.$plus$plus$eq$(Growable.scala:50)
[error]     at scala.collection.mutable.MapBuilder.$plus$plus$eq(MapBuilder.scala:25)
[error]     at scala.collection.generic.GenMapFactory.apply(GenMapFactory.scala:48)

解决办法:在file—>settings->build->compiler->Scala compiler->Scala compiler Server
 

 

Maximun heap size 和VM options都尝试设置大一些(根据自己的PC情况)


此问题可能在scala 3.X的版本之后会减少发生,本手顺适用于scala2.x的版本


如果你是用git bash进行项目的编译构建的话,需要修改sbt相关目录的 JVM的配置文件,具体可以自己研究(如果修改完没有生效,可能是自身JAVA JVM的设置覆盖了scala JVM的设置,根据这个方向进行研究),修改方法过几天有空格再写,未完待续。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/672849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号