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

区域 作用 异常 控制参数 解决思路
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区的总量)。

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

时间: 2024-08-07 17:11:45

java JVM常见的四大异常及处理方案的相关文章

Java虚拟机结构及常见内存溢出异常

每个Java虚拟机都有一个类加载器子系统,根据某个全限定名来装入类型,同样每个Java虚拟机都有一个执行引擎,它负责执行那些包含在被装载类的方法中的指令. 当虚拟机运行一个程序时,就需要从已加载的文件中得到信息,将这些信息组织到运行时数据区,以便于管理. Java运行时的数据区域划分 1.程序计数器:程序计数器是一块较小的内存空间,可以看做是当前线程的字节码的行号指示器. Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个时刻,一个处理器只会执行一条线程中的指

JAVA中常见异常小结

1.java.lang.ArithmeticException 算术运算异常,例如除数为0,所以引发了算数异常 2.Java.lang.StringIndexOutOfBoundsException:  这是截取字符串substring()产生的下标越界异常.原因是可能是字符串为空,或长度不足1 3.Java.lang.NullPointerException空指针异常 出现该异常的原因在于某个引用为null,但却调用了它的某个方法,这时就会出现该异常 4.ClassCastException

开通博客第一天 (先发一些android(java)常见异常信息

常见异常: java.lang.AbstractMethodError抽象方法错误.当应用试图调用抽象方法时抛出. java.lang.AssertionError断言错.用来指示一个断言失败的情况. java.lang.ClassCircularityError类循环依赖错误.在初始化一个类时,若检测到类之间循环依赖则抛出该异常. java.lang.ClassFormatError类格式错误.当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出. ja

java中常见的异常类

1. java.lang.nullpointerexception   这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空

java中常见的异常

Java中的异常分为2种: 1:JVM异常,这类异常或错误由JVM抛出.具有排他性或最具逻辑性 2:程序异常,这些异常由应用程序或API程序员显示地抛出.   JVM抛出的异常 1:NullPointerException 空指针 public class Test { static String s; public static void main(String[] args) { System.out.println(s.length()); } } 解析:使用一个当前值为null的引用变量

java中常见的异常种类

Java常见的异常种类 ------------------------------------------------------------------------------- java Exception: 1.Error 2.Runtime Exception运行时异常 3.Exception 4.throw用户自定义异常 异常类分为两个大的类型:Error类代表了编译和系统的错误,不允许被捕获:Exception代表了java库方法所激发的异常.Exception类还包括Runtim

Java基础常见英语词汇

(转自http://www.jianshu.com/p/2743fe834166) Java基础常见英语词汇(共70个) ['?bd?ekt] ['?:rientid]导向的 ['pr??ɡr?m??]编程OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 [d?'vel?pm?nt][k?t]工具箱 ['v??tj??l]虚拟的JDK:Java development kit, java开发工具包 JVM:java

如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码

程序小白在写代码的过程中,经常会不经意间写出发生内存溢出异常的代码.很多时候这类异常如何产生的都傻傻弄不清楚,如果能故意写出让jvm发生内存溢出的代码,有时候看来也并非一件容易的事.最近通过学习<深入理解java虚拟机-JVM高级特性与最佳实践>这本书,终于初步了解了一下java虚拟机的内存模型.本文通过写出使jvm发生内存溢出异常的代码来对自己的学习结果进行总结,同时也提醒自己以后写代码时候不要再跳进这个坑啦. java的内存管理是由java虚拟机自动进行管理的,并不需要程序员过多的手动干预

老男孩教育高端技术沙龙活动分享--JAVA JVM调优实战

本周末举办!,禁止空降,报名截止到5月8日19点报名方式见咨询QQ:  41117397 70271111电话: 01060747396  18911718229 18600338340官方群 246054962 208160987(标明51CTO) 报名条件:1.曾经支持关注老男孩博客及视频的朋友,需提供截图3条以上支持老男孩教育的评论(灌水不算).2.VIP运维班学员月薪低于9000(以提交的OFFER为准)或者没有实际维护JAVA环境(tomcat,resin等)的禁止报名.3.第10期以