Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 363|回复: 0

java JVM常见的四大异常及处理方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-5-27 09:27:41 | 显示全部楼层 |阅读模式
    区域 作用 异常 控制参数 解决思路
    java堆 存放对象的实例。 java.lang.OutOfMemory Error:Java heap space

    -Xms(初始化堆),

    -Xmx(最大堆),

    -Xmn(新生代)

    1、先查看是不是内存泄漏(内存中的对象是不是必须的),如果是泄漏,则找到与GC root 的路径解决泄漏。

    2、看物理内存是否允许加大-Xms,-Xmx。

    3、检查堆中是不是有对象实例一直在内存中没有释放。

    4、技巧让-Xms = -Xmx,减少内存扩展的开销。

    虚拟机栈和本地方法栈 控制方法的执行。

    如果线程请求的栈深度大于虚拟机所允许的最大深度:java.lang.StackOverflow Error

    如果续集你在扩展栈时无法申请到足够的内存空间:

    java.lang.OUtOfMemory Error

    -Xss

    1、加大-Xss参数。

    2、减少线程。

    3、更换64位虚拟机。

    4、减少最大堆(Xmx)。

    方法区 用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。 java.OutOfMemory Error:PermGen space

    -XX:PermSize

    -XX:MaxPermSize

    这是最常见的内存溢出异常。

    1、加大参数(治标不治本)。

    2、增加参数:-XX:PrintGCDetails,-XX:+PrintGCTimeStamps和-XX:+PrintGCDateStamps,还可以指定日志输出到文件:-Xloggc:<fileName>。通过查看GC日志来查看新生代GC(Minor GC)和老年代GC(Full GC或MajorGC)的回收效率和回收频率。通常Minor GC会很频繁,回收效率高才是对。

    3、稍微的加大Survivor1  Survivor2的空间。

    本机直接内存 如NIO,就是直接通过此内存实现。

    java.lang.OutOfMemory Error,有

    allocate、Native字样

    -MaxDirectMemorySize

    如不指定则与-Xmx一致。

    合理规划服务器内存,预留足够的内存给本地内存。加大参数。

    空间关系:

      java堆 = 新生代 + 老年代。

      新生代 = Eden(伊甸园) + Survivor1 + Survivor2。

      大多数情况下,对象在新生代Eden区中分配。当Eden中没有足够的空间时,就触发一次Minor GC。Survivor2 是Minor GC时用于复制用的。当发生Minor GC时如果发现所要辅助的对象(活着的对象)无法存放到Survivor2中,则通过分配担保机制提前转移到老年代中去。

      如配置-Xms20M,-XMx20M,-Xmn10M,-XX:SurvivorRatio=8。

    含义:java堆大小为20M,不可扩展,其中10MB分配给新生代,剩下的10MB分给老年代。-XX:SurvivorRatio=8 表示新生代中Eden区与其中一个Survivor区的空间比例为8:1。即 eden space 8192k,from space 1024k,to space 1024k。新生代总可用空间为9216kb(Eden区+1个Survivor区的总量)。

    我们公司centos6.8 ,100G的内存,配置如下:

    JAVA_OPTS="-Xms8g -Xmx8g -XX:ParallelGCThreads=8 -XX:PermSize=2g -XX:MaxPermSize=4g -Xss512k -Xmn6g -XX:-DisableExplicitGC -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled"

    CATALINA_OPTS="-Xms8g -Xmx8g -XX:ParallelGCThreads=8 -XX:PermSize=2g -XX:MaxPermSize=4g -Xss512k -Xmn6g -XX:-DisableExplicitGC -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled"

    版权声明:本文只作者原创,转文请注明出处。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-2 21:51 , Processed in 0.164373 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表