Java 中(堆溢出、内存溢出、栈溢出)

 Java 内存溢出有以下三种

1 java.lang.OutOfMemoryError: Java heap space —-JVM Heap (堆)溢出 JVM 在启动的时候会自动设置 JVM Heap 的值,其初始空间(即 -Xms )是物理内存的 1/64 ,最大空间( -Xmx )不可超过物理内存。可以利用 JVM 提供的 -Xmn -Xms -Xmx 等选 项可进行设置。Heap 的大小是 Young Generation Tenured Generaion 之和。在 JVM 中如果 98 % 的时间是用于 GC ,且可用的 Heap size 不足 2 % 的时候将抛出此异常信 息。
解决方法:手动设置 JVM Heap (堆)的大小。
2 java.lang.OutOfMemoryError: PermGen space —- PermGen space 溢出。 PermGen space 的全称是 Permanent Generation space ,是指内存的永久保存区域。为什么会内存溢出,这是由于这块内存主要是被 JVM 存放 Class Meta 信息的, Class 在被 Load 的时候被放入 PermGen space 区域,它和存放 Instance Heap 区域不同, sun GC 不会在主程序运行期对 PermGen space 进行清理,所以如果你的 APP 会载 入很多 CLASS 的话,就很可能出现 PermGen space 溢出。
解决方法: 手动设置 MaxPermSize 大小
3 java.lang.StackOverflowError —- 栈溢出
栈溢出了, JVM 依然是采用栈式的虚拟机,这个和 C Pascal 都是一样的。函数的调用过程都体现在堆栈和退栈上了。调用构造函数的 太多了,以致于把栈区溢出了。通常 来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K 的空间(这个大约相当于在一个 C 函数内声明了 256 int 类型的变 量),那么栈区也不过是需要 1MB 的空间。通常栈的大小是 1 2MB 的。 通常递归也不要递归的层次过多,很容易溢出。
解决方法:修改程序。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值