如何彻底解决Java应用中频繁出现的PermGen space异常问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计727个文字,预计阅读时间需要3分钟。
开发中遇到Eclipse报错:java.lang.OutOfMemoryError: PermGen space。
PermGen space 百度翻译为:永久区内存不足。
1. 首先来看一张jvm结构图:
内存不足问题一般都发生在堆上,GC作用区域也是在堆上。
2. 可能的解决方法:
- 增加永久区大小(PermGen space)- 使用CMS或G1垃圾收集器- 检查是否有大量静态变量未被回收- 减少使用反射和动态代理- 优化代码,减少内存占用
开发中遇到Eclipse报错:java.lang.OutOfMemoryError: PermGen space。
PermGen space百度翻译为:永久区域内存不足。
1. 先来一张jvm结构图:
内存不足问题一般都是发生在'堆‘上,GC作用区域也是在'堆‘上。
2. 这个'堆‘又划分成了好几块区域,包括:
新生代:包括伊甸园区和存活区。
老年代:
永久带:jdk1.8后变成元空间,元空间不再占用堆中的空间,而永久带却是在堆中开辟空间。
可以发现,堆中就有个永久区。永久区的内存溢出,其实就是堆的内存不够用。
只需要调大堆的内存大小就可以解决问题。
3. 调整堆大小的参数:
-Xms256m -Xmx1024m
-Xms:堆的初始化大小,这里设置成了256m.
-Xmx:堆最大的大小,这个设置成了1024m.
这里面就存在了一个可伸缩的空间,而这个空间的存在会损耗服务的性能。因为扩容和释放空间都是有性能损耗的。
本文共计727个文字,预计阅读时间需要3分钟。
开发中遇到Eclipse报错:java.lang.OutOfMemoryError: PermGen space。
PermGen space 百度翻译为:永久区内存不足。
1. 首先来看一张jvm结构图:
内存不足问题一般都发生在堆上,GC作用区域也是在堆上。
2. 可能的解决方法:
- 增加永久区大小(PermGen space)- 使用CMS或G1垃圾收集器- 检查是否有大量静态变量未被回收- 减少使用反射和动态代理- 优化代码,减少内存占用
开发中遇到Eclipse报错:java.lang.OutOfMemoryError: PermGen space。
PermGen space百度翻译为:永久区域内存不足。
1. 先来一张jvm结构图:
内存不足问题一般都是发生在'堆‘上,GC作用区域也是在'堆‘上。
2. 这个'堆‘又划分成了好几块区域,包括:
新生代:包括伊甸园区和存活区。
老年代:
永久带:jdk1.8后变成元空间,元空间不再占用堆中的空间,而永久带却是在堆中开辟空间。
可以发现,堆中就有个永久区。永久区的内存溢出,其实就是堆的内存不够用。
只需要调大堆的内存大小就可以解决问题。
3. 调整堆大小的参数:
-Xms256m -Xmx1024m
-Xms:堆的初始化大小,这里设置成了256m.
-Xmx:堆最大的大小,这个设置成了1024m.
这里面就存在了一个可伸缩的空间,而这个空间的存在会损耗服务的性能。因为扩容和释放空间都是有性能损耗的。

