java内存溢出的几种原因和解决办法是什么?

java内存溢出的几种原因和解决办法是:

第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出:

那什么样的情况就是堆栈溢出呢?当你看到下面的关键字的时候它就是堆栈溢出了:

java.lang.OutOfMemoryError: ......java heap space.....

也就是当你看到heap相关的时候就肯定是堆栈溢出了,此时如果代码没有问题的情况下,适当调整-Xmx和-Xms是可以避免的,不过一定是代码没有问题的前提,为什么会溢出呢,要么代码有问题,要么访问量太多并且每个访问的时间太长或者数据太多,导致数据释放不掉,因为垃圾回收器是要找到那些是垃圾才能回收,这里它不会认为这些东西是垃圾,自然不会去回收了;主意这个溢出之前,可能系统会提前先报错关键字为:

java.lang.OutOfMemoryError:GC over head limit exceeded

这种情况是当系统处于高频的GC状态,而且回收的效果依然不佳的情况,就会开始报这个错误,这种情况一般是产生了很多不可以被释放的对象,有可能是引用使用不当导致,或申请大对象导致,但是java heap space的内存溢出有可能提前不会报这个错误,也就是可能内存就直接不够导致,而不是高频GC.

第二类内存溢出,PermGen的溢出,或者PermGen 满了的提示,你会看到这样的关键字:

关键信息为:

java.lang.OutOfMemoryError: PermGen space

原因:系统的代码非常多或引用的第三方包非常多、或代码中使用了大量的常量、或通过intern注入常量、或者通过动态代码加载等方法,导致常量池的膨胀,虽然JDK 1.5以后可以通过设置对永久带进行回收,但是我们希望的是这个地方是不做GC的,它够用就行,所以一般情况下今年少做类似的操作,所以在面对这种情况常用的手段是:PermGen的溢出和-XX:MaxPermSize的大小。

第三类内存溢出:在使用ByteBuffer中的allocateDirect()的时候会用到,很多javaNIO的框架中被封装为其他的方法

溢出关键字:

java.lang.OutOfMemoryError: Direct buffer memory

如果你在直接或间接使用了ByteBuffer中的allocateDirect方法的时候,而不做clear的时候就会出现类似的问题,常规的引用程序IO输出存在一个内核态与用户态的转换过程,也就是对应直接内存与非直接内存,如果常规的应用程序你要将一个文件的内容输出到客户端需要通过OS的直接内存转换拷贝到程序的非直接内存(也就是heap中),然后再输出到直接内存由操作系统发送出去,而直接内存就是由OS和应用程序共同管理的,而非直接内存可以直接由应用程序自己控制的内存,jvm垃圾回收不会回收掉直接内存这部分的内存,所以要注意了哦。

如果经常有类似的操作,可以考虑设置参数:-XX:MaxDirectMemorySize

第四类内存溢出错误:

溢出关键字:

java.lang.StackOverflowError

这个参数直接说明一个内容,就是-Xss太小了,我们申请很多局部调用的栈针等内容是存放在用户当前所持有的线程中的,线程在jdk 1.4以前默认是256K,1.5以后是1M,如果报这个错,只能说明-Xss设置得太小,当然有些厂商的JVM不是这个参数,本文仅仅针对Hotspot VM而已;不过在有必要的情况下可以对系统做一些优化,使得-Xss的值是可用的。

第五类内存溢出错误:

溢出关键字:

java.lang.OutOfMemoryError: unable to create new native thread

上面第四种溢出错误,已经说明了线程的内存空间,其实线程基本只占用heap以外的内存区域,也就是这个错误说明除了heap以外的区域,无法为线程分配一块内存区域了,这个要么是内存本身就不够,要么heap的空间设置得太大了,导致了剩余的内存已经不多了,而由于线程本身要占用内存,所以就不够用了,说明了原因,如何去修改,不用我多说,你懂的。

第六类内存溢出:

溢出关键字

java.lang.OutOfMemoryError: request {} byte for {}out of swap

这类错误一般是由于地址空间不够而导致。

六大类常见溢出已经说明JVM中99%的溢出情况,要逃出这些溢出情况非常困难,除非一些很怪异的故障问题会发生,比如由于物理内存的硬件问题,导致了code cache的错误(在由byte code转换为native code的过程中出现,但是概率极低),这种情况内存 会被直接crash掉,类似还有swap的频繁交互在部分系统中会导致系统直接被crash掉,OS地址空间不够的话,系统根本无法启动,呵呵;JNI的滥用也会导致一些本地内存无法释放的问题,所以尽量避开JNI;socket连接数据打开过多的socket也会报类似:IOException: Too many open files等错误信息。

java 内存 溢出_java内存溢出的几种原因和解决办法是什么?相关推荐

  1. 内存溢出的几种原因和解决办法

    对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么多大多数在解决OOM的情况,于此,本文就只阐述这个内容,携带一些分析和理解和部分扩展内容,也就是JVM宕机中的一些问题,OK,下面说下O ...

  2. 内存溢出的几种原因和解决办法是什么?

    内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存. 引起内存溢出的原因有很多种,常见的有以下几种: 内存中加载的数据量过于庞大,如一次从 ...

  3. java replace无效_Java String.replace()方法无效的原因及解决方式

    首先我们来看个例子 public class Demo1 { public static void main(String[] args) { String aa="abcd"; ...

  4. java内存(java内存溢出的几种原因和解决办法)

    java的内存模型有哪些呢? 在java中可采用如下的形式: synchronized关键字或使用java.util.concurrent.locks中的锁 volatile关键字 Volatile表 ...

  5. java.lang.IllegalStateException: Failed to introspect Class报错原因和解决办法

    这个报错其实就是没有找到要加载的类,一般在启动的时候报错. 加载不到的类有两种情况,一种是直接找不到要加载的依赖包,或者添加了依赖包后没有加载进入,需要看看是不是 maven 的设置问题,重新刷新加载 ...

  6. Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...

  7. 内存泄漏的原因及解决办法_探索内存碎片化 - 第288篇

    相关历史文章(阅读本文之前,您可能需要先看下之前的系列 ) 色谈Java序列化:女孩子慎入 - 第280篇 烦不烦,别再问我时间复杂度了:这次不色,女孩子进来吧 - 第281篇 双向链表,比西天还远? ...

  8. 多玩我的世界java异常_应用程序发生异常 未知的软件异常解决办法大全

    应用程序出错了怎么办?很多朋友都遇到过:应用程序发生异常 未知的软件异常(0X????????),位置为0x????????.或者是"0x????????"指令引用的"0 ...

  9. java提示null_java 出现NullPointerException的原因及解决办法

    java 出现NullPointerException的原因及解决办法 日常开发过程中,最常见的异常莫过于NullPointerException,之前的时候,只是知道去找到报错的位置,然后去解决它, ...

最新文章

  1. Nginx(二) 虚拟主机配置
  2. 为什么不能够用unsigned 修饰 float和double
  3. 存储过程—导出table数据为inser sqlt语句
  4. vi和vim的基础使用
  5. swoole的安装(已经做测试成功)
  6. 多层陶瓷电容器用处_【科普贴】多层陶瓷电容器的制造工序,你知道吗?
  7. 背景图处理,这是个好东西记录一下
  8. vb获取数组长度_如何实现数组的二分查找
  9. 前后端分离项目如何部署_前后端分离项目,如何解决跨域问题?
  10. Maven多模块打包
  11. c语言内置画直线函数库,C语言不调用库函数画直线
  12. Android应用程序组件Content Provider的共享数据更新通知机制分析
  13. Mac下解决editcap等wireshark配套工具not found
  14. java小数换成字符实现加法_第一、二次笔记总结
  15. ChaiNext:市场短期内延续区间震荡
  16. 计算机通信职称评定,2017年通信工程师中级职称评定条件说明
  17. 【单片机】之MCS-51系列单片机硬件结构
  18. h5 ios Safair下载文件自动添加.html导致文件乱码问题,ios不能使用接口播放视频的问题
  19. MFC 隐藏/显示鼠标图标
  20. 一招解决MySql Specified key was too long; max key length is 767 bytes

热门文章

  1. GUID System.Guid
  2. 中国广电正式推出5G服务,中国移动赶紧推出免费服务挽留用户
  3. SAP XI Certification Questions
  4. IAR之Checksum
  5. Python使用“漫威API”探索漫威宇宙
  6. C语言重温-1-指针
  7. PS平面设计教程nbsp;利用路径及画…
  8. WiFi QC 自动测试:ixChariot API初探
  9. python鼠标右键检测按钮_松勤软件自动化测试-如何将一个Python脚本加入Windows右键菜单...
  10. python删除文本最后一行_用python删除文件中的最后一行