前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM中的内存溢出详解

JVM中的内存溢出详解

作者头像
Java学习录
发布2019-05-15 13:30:43
7800
发布2019-05-15 13:30:43
举报
文章被收录于专栏:Java学习录Java学习录

堆溢出
代码语言:javascript
复制
java.lang.OutOfMemoryError: Java heap space
这个异常是由于堆中存在大量的对象,这些对象无法通过垃圾回收进行收集从而导致的堆内存溢出,堆溢出呢,分为两种情况:
  • 内存泄露(大量无用的对象与根节点还具有管理,无法被回收)
  • 对象过多
如何解决?
  • 内存泄露情况可以通过工具找出泄露的具体代码然后进行优化
  • 对象太多可以适当根据机器的性能使用-Xms -Xmx等参数调整堆的大小
  • 优化数据结构,避免内存浪费
直接内存溢出
代码语言:javascript
复制
OutOfMemoryError

直接内存并不属于运行时数据区的一部分。但是也需要占用内存,如果我们在分配内存时把本机的总内存都分配给运行时数据区的各个部分而忽略了直接内存的话就会容易引起直接内存溢出。Java中使用直接内存最多的就是NIO。

如何解决?
  • 使用-XX:MaxDirectMemorySize属性指定直接内存的大小
方法区溢出
代码语言:javascript
复制
java.lang.OutOfMemoryError: PermGen space
因为方法区主要是负责存放类的相关信息,而且因为gc的次数也不像堆来的频繁,所以当class越来越多的时候就会引起此异常
如何解决?
  • 使用-XX:PermSize参数调整方法区的大小
栈溢出
代码语言:javascript
复制
StackOverflowError
代码语言:javascript
复制
由于线程请求的栈深度大于了线程所允许的最大深度而引起的
如何解决?
代码语言:javascript
复制
使用-Xss参数调整栈的大小
代码语言:javascript
复制
OutOfMemoryError: unable to create new native thread
当创建的线程多到栈的内存不足以支撑时就会引起此异常

如何解决?

代码语言:javascript
复制
使用-Xss参数调整栈的大小
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 堆溢出
  • 这个异常是由于堆中存在大量的对象,这些对象无法通过垃圾回收进行收集从而导致的堆内存溢出,堆溢出呢,分为两种情况:
    • 如何解决?
    • 直接内存溢出
      • 如何解决?
      • 方法区溢出
        • 因为方法区主要是负责存放类的相关信息,而且因为gc的次数也不像堆来的频繁,所以当class越来越多的时候就会引起此异常
          • 如何解决?
            • 如何解决?
        • 栈溢出
          • 当创建的线程多到栈的内存不足以支撑时就会引起此异常
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档