对于OOM的了解,以及如何处理OOM?

1、什么是OOM?
        OOM,全称是Out Of Memory ,意思就是超出内存空间,造成内存溢出,或者内存泄漏。当jvm没有足够的空间为对象分配空间的时候,或者是垃圾回收器现在也没有多余的空间进行回收,这时候造成的空间溢出,就会抛出OOM异常。
        所谓的内存溢出:说白了就是内存不足;所谓的内存泄漏:说白了就是在内存中可能会出现这样的对象:对象的引用是弱引用,在垃圾回收的时候置为null,但是值还是强引用,这个时候,这部分的内存不能分配给其他的对象,造成虚拟机不能再一次的使用该内存。

2、常见的OOM?
        2.1、堆空间溢出
        2.2、永久代空间溢出
        2.3、在JVM规范中提到,在Java运行时数据区中,除了程序计数器以外的其他的四个部分,都是可能会造成OOM异常。

3、如何解决OOM问题?
        3.1、可以dump堆内存的镜像信息
            设置jvm参数:-XX:+HeapDumpOnOutOfMemoryError,程序运行时,当发生OOM异常时,就会自动的dump堆内存的相关信息,以便进行分析。不过这个方法需要在JDK1.5版本以上。
        3.2、可以使用JDK自带的 jmap 命令 "jmap -dump:format=b,file=heap.bin <pid>" 其中的 pid 可以使用 jps 获得。
        3.3、得到了dump文件后,如何分析,可以使用以下工具分析:
            A、mat 工具,这个工具是基于eclipse rcp 内存分析工具。
            B、jhat 工具,这个工具是JDK自带的内存分析工具。

4、java如何防止OOM问题呢?
        能出现OOM问题的原因就是:
        A、给jvm分配的内存空间太小了,导致可能会频繁的出现内存不足现象。
        B、对象用的太多,并且用完了之后,没有进行空间的释放,导致空间资源浪费,出现OOM问题。
        解决:
            可以设置jvm的相关堆参数,将堆的空间设置的大一些,但是一般不推荐,因为分配给jvm的资源时一定的,对的空间多了,其他的资源就少了,尽管可能会解决OOM问题,但是可能会出现其他的问题,所以一般情况,就使用默认的。
            可以使用GC进行分代回收,或者使用内存的分配策略,进行解决。
        

全部评论

相关推荐

06-23 17:45
门头沟学院 Java
里面的项目啥的真的有用吗?&nbsp;这些人是割韭菜吗?
HellowordX:很简单,如果你有自己稳定的学习路线和获取知识的方式就没必要,如果你啥都不懂的小白或者里边有你感兴趣的知识,我觉得挺值,我也经常为知识付费,因为时间精力有限,很多东西我不可能自己重复造轮子
点赞 评论 收藏
分享
06-23 23:49
中南大学 Java
成绩一坨屎,英语6级没过,没读研,没考教资,没考计算机二级,没考公,没谈过恋爱,你们说我的这个大学生涯是不是混的有点失败啊?哎老中一生的容错还是太低了下辈子一定注意混好大学生涯不留遗憾
K1einMoretti:1.不保研 成绩没太大用 2.6级没过看用人企业要求了,基本上只要4级以上 3. 读不读研看自己选择,现在这环境螚先就业就先就业 4. 你不当老师考啥教资 5. 计算机二级没用(这证纯给国家上供) 6. 订婚***案了解一下?
点赞 评论 收藏
分享
ZywOo_求职版:谁问你了....
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务