今天说说烦人的Java内存溢出问题

作为一个开发人员最不想看到的就是BUG,可见性的问题可能还不是最关键的,至少我们可以找到问题,很快解决,一般BUG也不会重复出现;但今天要学习的内存溢出就不一样的,很难从根本上解决;因它与各方面的环境有关系,比如计算机内存过低、代码写的不健壮、运行内存设置不合理等等。

网络配图 常见的Java内存溢出类型,你知道哪些? 下面列出开发和运行过程中3种常见的内存溢出类型: 1、java.lang.OutOfMemoryError: PermGen space 通常Java虚拟机(JVM)管理着类内存,堆和非堆。堆是给开发人员使用的,只有在JVM启动时才会创建;非堆则是JVM留给自己使用的,用来放类的信息;非堆在运行生命周期内GC(垃圾收集,回收)是不会主动释放空间。如果我们开发的应用程序代码量很大或用到的第三方Jar包量比较大,而Tomcat的MaxPermSize设置不合理,这时就很可能报这个错误,当然这不一定是马上呈现出来,可能一天、二天或多少天后,你发现程序无法访问,到服务器一看就是这个错在做怪。 2、java.lang.OutOfMemoryError: Java heap space 这种内存是这们开发中最常见的错误之一,产生的主要原因是: (1)、本身设置的内存参数过小(Xms/Xmx,NewSize/MaxNewSize); (2)、程序自身的问题。Heap space的默认空间(-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4,这是个通用标准,我们可以根据系统环境进行重新设置;如果我们系统的内存剩余不到40%,JVM就会增大Xmx设置的值,内存剩余超过70%,JVM就会减少Xms设置的值。因此服务器的Xmx和Xms设置的值一般应该是相同的,这样可以有效避免每次GC(回收)后都要调整虚拟机堆的大小。需要注意的是设置的值不能超过物理内存或操作系统的最大限制,这样会导致起服务器无法启动。

网络配图 3、java.lang.OutOfMemoryError: c heap space 系统对于C Heap没有任何限制,所以C Heap发生时,java进程所占用的内存会不断增长,直到死机,唯一的解决方法就是杀掉进程或重启计算机。

网络配图 我们学习的目的是要解决问题,下面看看怎么避免以上错误的发生。 以下是我总结的6种解决方案,如果不全,大家补充一下: 1、写代码时尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在使用完成后,自动设置为null; 2、我们在程序中涉及字符串处理时,尽理不要使用String,应该使用StringBuffer; 3、尽可能少用静态变量,因为静态变量是全局性的,GC不会主动回收; 4、不要集中创建对象尤其是大对象; 5、尽量运用对象池技术以提高系统性能; 6、不要在经常调用的方法中创建对象。 小伙伴们有什么不同看法,可以提哦!!!

本文分享自微信公众号 - Java学习网(javalearns)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android相关

Android Profile--Memory Monitor

在Android Studio3.0 Preview版本中,Android Profiler中提供了Memory Monitor工具来监控选中App内存变化,可...

64030
来自专栏好好学java的技术栈

面试官问的hibernate和mybatis常见面试题

我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和myb...

95710
来自专栏FreeBuf

从最近的微信支付看XXE漏洞

先说下写这篇文章的初衷吧,最近微信支付java_sdk刚爆发了一次xxe漏洞,然后领导赶快用自家的静态代码审计工具做了审计(这里我就不报名字,本来可以帮公司推广...

30730
来自专栏烂笔头

在Python应用中使用MongoDB

目录[-] Python是开发社区中用于许多不同类型应用的强大编程语言。很多人都知道它是可以处理几乎任何任务的灵活语言。因此,在Python应用中需要一个...

46040
来自专栏逻辑熊猫带你玩Python

Linux | 从自助开始

help命令是一个非常实用但是用处不大的一个命令。你可以用来获得一些信息,但是得不到所有的信息。

17220
来自专栏FreeBuf

Flash XSS检测脚本的简单实现

前言 这里主要是讲如何快速扫描到有问题的flash文件,用于批量,有时候很笨的方法也会有奇效,下面记录一下在实现过程中的一些思路和遇到的一些坑。 ? 第三方插件...

35350
来自专栏工科狗和生物喵

【计算机本科补全计划】Java学习笔记(一) 安装配置 (Mac Sublime3) 红黄蓝

正文之前 标题后面为啥要加三个字呢。蹭热度不至于,就想着,让更多人知道么。毕竟我以后也会有当爸的一天~ 要是那些人渣站在悬崖上,旁边没啥人看着,我上去踢一脚是做...

41270
来自专栏技术墨客

Nodejs学习笔记(1)——安装nodejs

    关于大名鼎鼎的Nodejs是什么就不用再介绍了,他的牛逼之处数都数不完——让javascript称霸全宇宙、将一个只用于前端的编程语言同时可以制霸前后端...

12220
来自专栏酷玩时刻

微信公众号开发之推广支持

前几篇文章详细介绍了微信App支付、公众号支付、微信红包、微信刷卡以及支付宝支付,今天来聊聊 推广支持之生成带参数的二维码、长链接转短链接

45830
来自专栏黑泽君的专栏

day45_Webservice学习笔记_01

Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。

15410

扫码关注云+社区

领取腾讯云代金券