JVM内存溢出的两大类型及解决方案

 我来答
世纪网络17
2022-09-26 · TA获得超过5947个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:142万
展开全部

  你知道如何解决JVM内存溢出问题吗 这里和大家分享一下 JVM管理两种类型的内存 堆和非堆 堆是给开发人员用的上面说的就是 是在JVM启动时创建 非堆是留给JVM自己用的 用来存放类的信息的

  JVM内存溢出的详细解决方案

  JVM内存溢出类型

   java lang OutOfMemoryError:PermGenspace

  JVM管理两种类型的Java内存 堆和非堆 堆是给开发人员用的上面说的就是 是在JVM启动时创建 非堆是留给JVM自己用的 用来存放类的信息的 它和堆不同 运行期内GC不会释放空间 如果webapp用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小 超出了也会导致这块内存的占用过多造成JVM内存溢出 或者tomcat热部署时侯不会清理前面加载的环境 只会将context更改为新部署的 非堆存的内容就会越来越多

  PermGenspace的全称是PermanentGenerationspace 是指内存的永久保存区域 这块内存主要是被JVM存放Class和Meta信息的 Class在被Loader时就会被放到PermGenspace中 它和存放类实例(Instance)的Heap区域不同 GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理 所以如果你的应用中有很CLASS的话 就很可能出现PermGenspace错误 这种错误常见在web服务器对JSP进行prepile的时候 如果你的WEBAPP下都用了大量的第三方jar 其大小超过了jvm默认的大小( M)那么就会产生此错误信息了

  一个最佳的配置例子 (经过本人验证 自从用此配置之后 再未出现过tomcat死掉的情况)

   setJAVA_OPTS= Xms m

   Xmx m XX:PermSize= M

   XX:MaxNewSize= m

   XX:MaxPermSize= m

   java lang OutOfMemoryError:Javaheapspace

  再来看一下JVM内存溢出的第二种情况 第一种情况是个补充 主要存在问题就是出现在这个情况中 其默认空间(即 Xms)是物理内存的 / 最大空间( Xmx)是物理内存的 / 如果内存剩余不到 % JVM就会增大堆到Xmx设置的值 内存剩余超过 % JVM就会减小堆到Xms设置的值 所以服务器的Xmx和Xms设置一般应该设置相同避免每次GC后都要调整虚拟机堆的大小 假设物理内存无限大 那么JVM内存的最大值跟操作系统有关 一般 位机是 g到 g之间 而 位的就不会有限制了

  注意 如果Xms超过了Xmx值 或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来

  垃圾回收GC的角色

  JVM调用GC的频度还是很高的 主要两种情况下进行垃圾回收

  当应用程序线程空闲 另一个是java内存堆不足时 会不断调用GC 若连续回收都解决不了内存堆不足的问题时 就会报outofmemory错误 因为这个异常根据系统运行环境决定 所以无法预期它何时出现 根据GC的机制 程序的运行会引起系统运行环境的变化 增加GC的触发机会

lishixinzhi/Article/program/Java/hx/201311/26579

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迪凯特科技(北京)有限公司
2023-07-28 广告
程序逻辑混乱,出现不确定现象,测试结果时好时坏。理顺一下程序思路,保证采集按键、发送、接收数据、显示为一个完整的周期跟后面其他的操作没有关系.你可以联系迪凯特问问,他家挺好的,下边有链接。... 点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式