文章目录
1. 复现问题
今天使用
idea
开发时,突然报出如下错误:
Exception in thread "main"java.lang.OutOfMemoryError:Java heap space
at org.apdplat.word.dictionary.impl.DoubleArrayDictionaryTrie.allocate(DoubleArrayDictionaryTrie.java:188)
at org.apdplat.word.dictionary.impl.DoubleArrayDictionaryTrie.init(DoubleArrayDictionaryTrie.java:207)
at org.apdplat.word.dictionary.impl.DoubleArrayDictionaryTrie.addAll(DoubleArrayDictionaryTrie.java:307)
at org.apdplat.word.dictionary.DictionaryFactory$DictionaryHolder$1.load(DictionaryFactory.java:116)
at org.apdplat.word.util.AutoDetector.loadAndWatch(AutoDetector.java:102)
at org.apdplat.word.dictionary.DictionaryFactory$DictionaryHolder.reload(DictionaryFactory.java:87)
at org.apdplat.word.dictionary.DictionaryFactory.reload(DictionaryFactory.java:65)
at org.apdplat.word.dictionary.DictionaryEnum.createDictionary(DictionaryEnum.java:65)
at org.apdplat.word.dictionary.DictionaryEnum.<clinit>(DictionaryEnum.java:20)
at com.zjs.Application.main(Application.java:42)
2. 分析问题
OutOfMemoryError
翻译成中文即是
堆内存溢出
,但什么情况下会出现堆内存溢出呢?
当我们在
IDEA
上运行较大项或较多项目时,会导致编译量很大,从而引起内存不足的情况,即报出
Error:java: java.lang.OutOfMemoryError: Java heap space
的错误,也就是堆内存溢出。
因此,需要修改
Idea
运行项目的内存大小。
- 首先,查看我的
idea
的堆内存大小。
快捷键
ctrl + alt + s
出现设置(
Settings
)弹出框,如下图所示:
- 找到
Build,Execution,Deployment
,单击展开,如下图所示:
- 单击
Complier
,即可查看到我的堆内存大小,如下图所示:
由图可以看出,我的堆内存大小256M,无法承载我的项目,即报出了
java.lang.OutOfMemoryError: Java heap space
。
此外,如果你的
ctrl + alt + s
快捷键被占用了,可以使用如下方式打开
设置(Settings)弹出框
。
- 单击
file
,如下图所示:
- 单击
Settings
,也可出现设置(Settings)弹出框
:
3. 解决问题
由上述分析可知,正因为在
Complier
设置的堆内存太小,导致无法承载大量的项目。
因而,我们可以将其设置为
2048
,如下图所示:
点击
ok
即可。
**如果不点击
ok
,则配置不生效。**
4. 补充解决java.lang.OutOfMemoryError: PermGen space问题
在
JDK1.6
环境中,需要考虑到永久代的问题。
如果运行大项目提示
java.lang.OutOfMemoryError: PermGen space
即永久代内存溢出问题 ,解决方式如下:
- 打开
Tomcat
配置Edit Configurations
- 点击
Server
,在VM options
输入框输入如下配置
-Xms512m-Xmx2048m-XX:PermSize=512m
-XX:MaxPermSize=2048m
点击
ok
即可。
**如果不点击
ok
,则配置不生效。**
- 参数说明:-
-Xms
:Java Heap
初始值,Server
端JVM
最好将-Xms
和-Xmx
设为相同值,开发测试机JVM
可以保留默认值--Xmx
:Java Heap
最大值,默认值为物理内存的1/4
,最佳设值应该视物理内存大小及计算机内其他内存开销而定--XX:PermSize
:设置持久代初始值--XX:MaxPermSize
:设置持久代最大值
**总之是要根据
本地配置
适当修改,我是
16G
内存,就设置最大
2G
大气一点!**
版权归原作者 互联网全栈开发实战 所有, 如有侵权,请联系我们删除。