论坛首页 Java企业应用论坛

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

浏览 16726 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-12-18  
kidneyball 写道
earneet 写道
我觉楼上的有些跑题了,大家讨论内存溢出的问题和 out of memory , 怎么扯上内存泄露了?


楼主带的头……请看三楼


我的错!

没想到大家那么热情的讨论着,我想这两个概念经常出现。所以就顺带了内存泄露了,呵呵!
就当大家都在学习了。可能很多TX还不一定了解两者的区别,呵呵!
0 请登录后投票
   发表时间:2012-12-18  
Dollyn 写道
扯这么多,为什么不让那个“架构师”来解释一下,有什么不同呢?


前面已经说了,有些大牛的权威是不能被否定的。呵呵!
何必自找苦吃!有点人不是那么open的!
0 请登录后投票
   发表时间:2012-12-18  
zean 写道
那头牛大概是想说java的分代垃圾回收吧


我也有同感,只不过没有说,呵呵,忘记了,那三个带,什么新生代、旧生代的.....,平时很少用,那些概念的东东记不清楚,只知道分了三个代。呵呵 。偶也提了这个,只不过名字纸记得新生代,其他两个忘记了。
0 请登录后投票
   发表时间:2012-12-18  
java中一般只会出现内存泄露吧,内存泄露可能回导致OutOfMemory。
而内存溢出java中似乎都会报出异常(比如数组越界,堆栈溢出)。C中当然也会,但是可以绕过。java中不知道可以不绕过。
所以说内存溢出不是OutOfMemory我觉得还是正确的。
0 请登录后投票
   发表时间:2012-12-18  
bruceasu 写道
这个应该不是问题吧?

内存溢出是指使用了不是分配给你的内存,最典型的是,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。


+1
0 请登录后投票
   发表时间:2012-12-18  
    程序运行一段时间后出现了 out of memery异常,我觉得是完全等价于表示memery leak,(当然缓存过载这些也会造成OOM,但是这个在设计之初就应该考虑到的问题,不应列入程序运行时的错误)。至于是堆溢出还是栈溢出是属于查问题的范畴,也都属于OOM的范围。
    至于“及时”的问题我觉得也不用纠结了,就是对象使用完后,可以被GC发现并回收就可以了,毕竟GC的运行时间不能人为控制。
    最后个人感觉这完全就是个咬文嚼字的问题啊。
0 请登录后投票
   发表时间:2012-12-18  
这几天我们的项目服务器也出现了这个情况,真是不知道怎么解决
0 请登录后投票
   发表时间:2012-12-18  
太二了,他一定是想说内存泄漏。
0 请登录后投票
   发表时间:2012-12-18   最后修改:2012-12-18
yq5858588 写道
这几天我们的项目服务器也出现了这个情况,真是不知道怎么解决


JDK bin 下面有一些监控JVM的工具 可以用来简单的排查一下

jstat、jmap之类的,还有图形的 jconsole

先jps 查看应用线程,然后 jmap 查看这个线程的内存状况

然后根据实际情况调整一下JVM 参数: Xms Xmx PermSize MaxPermSize 之类的,当然在不是应用BUG的情况下

0 请登录后投票
   发表时间:2012-12-18  
xia_tian___ 写道
yq5858588 写道
这几天我们的项目服务器也出现了这个情况,真是不知道怎么解决


JDK bin 下面有一些监控JVM的工具 可以用来简单的排查一下

jstat、jmap之类的,还有图形的 jconsole

先jps 查看应用线程,然后 jmap 查看这个线程的内存状况

然后根据实际情况调整一下JVM 参数: Xms Xmx PermSize MaxPermSize 之类的,当然在不是应用BUG的情况下



对的,如果是memory leak 的话,只能测试了,通过代码走查的方式,效率太低。首先定位大概会是什么问题。或者问题大概出现在哪里,然后用压力服务器测试,然后查看内存的使用情况,刚开始,内存会持续上升,但到一定程度后,如果没有memory leak的情况,这内存使用率应该是锯齿状的,即基本处于平衡;但是如果存在memory leak,这内存会一直往上递增,知道程序挂掉!

现在网上有很多内存监控软件了
0 请登录后投票
论坛首页 Java企业应用版

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