论坛首页 Java企业应用论坛

讨论一下:一位大牛说java'内存溢出' 和 'java.lang.OutOfMemoryError' 不是一回事

浏览 16725 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-12-17  
smilerain 写道
内存溢出会有OutOfMemoryError错误。
OutOfMemoryError错误出现的时候不一定就是内存溢出的原因,一个是表象,一个是原因

OutOfMemoryError: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.

求解释为什么不一定。
0 请登录后投票
   发表时间:2012-12-17  
以后说中文面试的面试官你就直接pass它掉算了。
IT技术更新快,中文术语翻译本来就很混乱。
0 请登录后投票
   发表时间:2012-12-17  
大牛只是一个传说
0 请登录后投票
   发表时间:2012-12-17  
按我的理解吧

内存溢出是指由于编程的问题,使得应用的内存占用随着时间的增加不断增长,并且这部分的内存占用却没有任何意义

而'java.lang.OutOfMemoryError'是由于程序使用的内存超过了JVM分配的内存(默认的,或手动初始化过的),而不一定是错误的内存使用,内存的占用也不会随着时间的增加不断增加,占用的内存也都是有意义的。

内存泄露同内存溢出。


总之:内存溢出/内存泄漏是应用BUG,而'java.lang.OutOfMemoryError'是因为没有对JVM按实际的需求进行初始化
0 请登录后投票
   发表时间:2012-12-17  
那头牛大概是想说java的分代垃圾回收吧
0 请登录后投票
   发表时间:2012-12-18  
我觉楼上的有些跑题了,大家讨论内存溢出的问题和 out of memory , 怎么扯上内存泄露了?
0 请登录后投票
   发表时间:2012-12-18  
这个应该不是问题吧?

内存溢出是指使用了不是分配给你的内存,最典型的是,c语言类,申请了10个字节长度的空间,却复制10个以上字节的数据到这个空间中,超出部分就会占用了其他的空间(有可能是其他程序的空间),改变了其他的空间内存数据结构,导致程序异常,或者被获取高权限。
OutOfMemoryError 是申请内存空间时,java虚拟机没有足够的内存分配,为了防止占用其他空间,java虚拟机抛出这种异常。

一个是事后后果,一个是事前预防。内存溢出会导致自身出现问题,其他程序出现问题,甚至整个操作系统都出现问题。OutOfMemoryError 只会导致自身被java虚拟机干掉,以便保护其他程序和操作系统。

话又说回来,java的内存管理,已经解决了最典型的内存溢出问题,因为一旦出现这种情况,会抛出数组越界异常。
java只有在下面两种情况会出现内存溢出问题:
1,关闭OutOfMemoryError 检查(只有sb才会干的事情)
2,使用jni(不过用了jni就是c、c++的问题了,跟java没有啥关系了)

从这个角度看,java的java的'内存溢出' 和 'java.lang.OutOfMemoryError' 可以近似认为是同一回事。

此外,众多回帖中还提到内存泄露问题,内存泄露是不停累积申请了,但又不使用,不释放的内存。不管哪种语言,代码质量不高都会产生这个问题,这个问题不会导致内存溢出,但最终会导致OutOfMemoryError。
0 请登录后投票
   发表时间:2012-12-18  
earneet 写道
我觉楼上的有些跑题了,大家讨论内存溢出的问题和 out of memory , 怎么扯上内存泄露了?


楼主带的头……请看三楼
0 请登录后投票
   发表时间:2012-12-18  
dohkoos 写道
内存溢出(out of memory/memory overflow)就是你要求分配的内存超出了系统能给你的。
内存泄漏(memory leak)就是没有及时释放内存资源。

内存泄漏不是内存溢出,但内存泄漏必然导致内存溢出。

内存溢出就是out of memory,表示内存资源不足了。


这为兄弟分析到位,我用我的c经验证明!
0 请登录后投票
   发表时间:2012-12-18  
扯这么多,为什么不让那个“架构师”来解释一下,有什么不同呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics