区域 作用 异常 控制参数 解决思路
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"

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

转载于:https://www.cnblogs.com/airduce/p/8093069.html

java JVM常见的四大异常及处理方案相关推荐

  1. Java中常见的十八种异常!

    作为一只敬业的程序员,就是不能接受我的编程出现bug!可见我们对bug是如此的深恶痛觉!它已成为我们职业生涯中的拦路虎,所以今天小千精心为大家总结一下Java中常见的几种异常,望大家多多注意. 1.j ...

  2. java runtime异常如何解决_成都汇智动力-Java中常见的RunTime异常及异常详解

    java.lang.ArithmeticException算术条件异常.譬如:整数除零等.java.lang.ArrayIndexOutOfBoundsException数组索引越界异常.当对数组的索 ...

  3. JAVA中常见的运行异常(RuntimeException)

    1) java.lang.NullPointerException 空指针异常:出现原因:调用了未经初始化的对象或者是不存在的对象. 2) java.lang.ClassNotFoundExcepti ...

  4. Java JVM常见知识点串讲

    大家可能在面试中,或多或少都遇到JVM相关的面试题,但是有个问题,就是JVM其实知识点挺多的,本文以笔者亲身经历为主,通过一个JVM的常见面试题,进行逐步了解,学习JVM. 这一切都是逼的,回想我刚工 ...

  5. 【深入Java虚拟机JVM 04】JVM内存溢出OutOfMemoryError异常实例

    说明:文章所有内容均摘自<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> 在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMe ...

  6. java.net.SocketException四大异常解决方案

    java.net.SocketException四大异常解决方案 参考文章: (1)java.net.SocketException四大异常解决方案 (2)https://www.cnblogs.co ...

  7. java中常见的异常类

    1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...

  8. Java 常见内存溢出异常与代码实现

    Java 堆 OutOfMemoryError Java 堆是用来存储对象实例的, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建的对象之间有可达路径以免对象被垃圾回收, 那么当创建的 ...

  9. Java 中常见的异常和自定义异常

    常见异常: java.lang.nullpointerexception    这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者 ...

  10. java开发常见异常_最常见的Java异常及其对Java开发人员的评价

    java开发常见异常 我知道我说过在完成视频之前我不会发帖,但这一直困扰着我. 至于视频的更新,我有些懒散,有些忙碌,但是我已经准备好记录第一集,这是我第一次有机会,而且我不需要太多的编辑. 无论如何 ...

最新文章

  1. Shell脚本中信号处理实践
  2. addonsmaker怎么制作_addonsmaker
  3. Python双版本下No module named 'requests'
  4. nacos mysql8.0修改
  5. 关于智能手机的基本知识
  6. Linux文件打包tar
  7. VC++ sourceforge.net中一些好的开源项目
  8. Java生成word表单|勾选框
  9. 笔记本cpu天梯图2021最新版
  10. ddrelease64 黑苹果_有老哥会看黑苹果哆嗦模式问题出在哪里的吗?
  11. 字符型指针,数组,字符串赋值
  12. win10彻底关闭休眠状态(1909以上版本)
  13. java mysql 源码分析_JAVA JDBC(MySQL)驱动源码分析
  14. breakpad 的dum文件的解析及demo的编译
  15. 日本准备推行AI婚配,年轻人会为“爱情算法”买单吗?
  16. MySQL34-其他数据库日志
  17. 几何约束栏设置不包括_AutoCAD 初级工程师认证参考样题
  18. configure: error: Package requirements (libzip >= 0.11 libzip ≠ 1.3.1 libzip ≠ 1.7.0) were not met
  19. 使用matlab计算y=tanx的积分,对1/tanx积分
  20. 浅谈民机软件适航宝典-DO-178

热门文章

  1. 前端架构最全总结——GUI 应用程序架构的十年变迁:MVC、MVP、MVVM、Unidirectional、Clean...
  2. Instagram 使用 Python 的经验
  3. 再谈如何成为一名优秀CTO
  4. python中读取txt文件、统计其中所有字母出现的频度_python——pandas练习题6-10
  5. python中的itertools模块
  6. 编程菜鸟的日记-初学尝试编程递归
  7. jQuery Form Plugin (二) :使用AJAX提交Form表单
  8. 阅读笔记-游戏开发中的人工智能-第6章-基本路径寻找及航点应用
  9. centof7无法上网问题
  10. mysql的体系架构和存储引擎