sbt为什么总抛出“java.lang.OutOfMemoryError: PermGen space”?
2016-03-10 16:05
579 查看
最近学习scala,在用sbt(Simple Build Tool,scala的构建工具)时,隔断时间会抛出“java.lang.OutOfMemoryError: PermGen space”这个异常,重启之后就好了,今天终于仍受不了了。
在问了google后,其解决方案比较直观,和增大jvm的内存大小的方法类似,增加些启动参数即可:
- 在哪里设置?
$ cat `which sbt`
其内容类似于下面的输出
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.13.0/libexec/sbt-launch.jar "$@"
可以看到sbt的配置默认在~/.sbtconfig文件中设置
- 设置选项
SBT_OPTS="-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:PermSize=256M -XX:MaxPermSize=512M"
但是,为什么会出现这个问题呢?以及配置中的选项都是什么含义?
- PermGen是什么?(参见https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation)
PermGen(Permanent Generation),主要用来存放Java Classes的内部表示。联系到sbt的问题上,是scala在动态运行时会生成class(closure会生成单独的class?),所以在运行一段时间后会出现PermGen不够的情况,重启后又ok了。
- CMSClassUnloadingEnabled参数什么意思?
默认情况下GC是不回收PermGen的空间的(其名字也能反映这点),这个选项就是启用清除PermGen的功能,删除不用的classes。但是需要和UseConcMarkSweepGC参数使用。
http://www.douban.com/note/311383726/?type=like
在问了google后,其解决方案比较直观,和增大jvm的内存大小的方法类似,增加些启动参数即可:
- 在哪里设置?
$ cat `which sbt`
其内容类似于下面的输出
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.13.0/libexec/sbt-launch.jar "$@"
可以看到sbt的配置默认在~/.sbtconfig文件中设置
- 设置选项
SBT_OPTS="-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:PermSize=256M -XX:MaxPermSize=512M"
但是,为什么会出现这个问题呢?以及配置中的选项都是什么含义?
- PermGen是什么?(参见https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation)
PermGen(Permanent Generation),主要用来存放Java Classes的内部表示。联系到sbt的问题上,是scala在动态运行时会生成class(closure会生成单独的class?),所以在运行一段时间后会出现PermGen不够的情况,重启后又ok了。
- CMSClassUnloadingEnabled参数什么意思?
默认情况下GC是不回收PermGen的空间的(其名字也能反映这点),这个选项就是启用清除PermGen的功能,删除不用的classes。但是需要和UseConcMarkSweepGC参数使用。
http://www.douban.com/note/311383726/?type=like
相关文章推荐
- JAVA 垃圾收集器与内存分配策略
- 一致性HASH算法的JAVA实现
- Java 中的垃圾回收策略
- Spring定时任务的实现
- Java并发编程之——Amino框架
- Selenium Webdriver java 积累
- java date 日期 date
- actor Java 实现
- Java开源分词系统IKAnalyzer学习(七) 词库加载分词
- Java彻底删除环境变量设置无效
- Java中URI,URL和URN的使用
- java rmi 两种方式 固定端口设置
- [置顶] SpringSecurity 源码分析一
- Java多线程 阻塞队列和并发集合
- 或许被我们遗忘的JAVA Math类
- 100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
- [置顶] Struts2 的token原理
- java 调 pro*c
- 面向GC的Java编程
- java.util.ResourceBundle使用详解