我只知道JAVA非常浪费内存 有内存溢出 

解决方案 »

  1.   

    我只知道JAVA非常浪费内存 有内存溢出 ???
    JAVA不浪费内存.如果你程序写的好,是没有内存泄漏的,当然也就不会导致内存溢出.通常情况下,java的GC(垃圾回收时)会对你分配了内存而没有再使用的对象进行自动回收,不需要你写代码进行手动回收.如下代码段:
    {
        Vector v = new Vector();
    }
    v的生命域为{}之间,在程序运行完{}后,jvm会自动消除v对其对象的引用,不需要象在c++里手动去把对象delete掉.当jvm进行垃圾回收时,发现对象没有了引用,则会回收对象所分配的内存(new Vector()).java的内存泄漏是指:你生成了很多对象,你并没有使用他们,但他们的引用没有消除.这样GC就不会回收他们.如果这样的对象足够多,则会造成内存溢出.
      

  2.   

    这样的话会造成内存溢出.....
    还是没有说明白内存泄漏啊.....第二,JAVA怎么不浪费内存?你一直new对象的时候 你说浪费不浪费?
      

  3.   

    内存泄露永远不可能发生在java身上....因为你不需要delete...
    在内存不足的时候GC会自己启动,只是在内存不足的时候。当然,你也可以强制的启动GC对于一般的应用,你想,内存不足gc就清垃圾,内存够用的时候什么浪费不浪费没啥大关系。内存泄露是指那些分配了之后,离开了作用域,但是永远不会被释放的内存,这一般是由程序员的疏忽造成的,在C++这样的语言里比较常见。
      

  4.   

    gc 不知道什么时候会启动的,但是你内存不足的时候就会启动,专杀没有reference的对象,所以不会内存泄漏
      

  5.   

    3楼说的是 内存泄漏这个概念的确是从C++移植到JAVA上面的!
    我可以告诉你们 这个是我的面试题!!!
    但是用人单位说JAVA存在内存泄漏的,我也很纳闷的.而且还有处理方案!
      

  6.   

    我比较赞同的一个说法是:Java 所谓的“内存泄漏”是指“无意识保留”,就是说,从程序功能上说,一个内存对象已经不再有用了,但是由于程序失误,在一个什么地方仍然保留着对这个对象的引用,造成无法回收。这种“无意识保留”跟 C/C++ 意义上的“内存泄漏”完全不是一回事。
      

  7.   

    比较赞同:maquan('ma:kju)使用 OptimizeIt 可以找出内存没有释放的问题所在。swing 使用的不好也会出现。常见的没有释放的情况。
    1,STATIC 变量引用
    2,Thread 没有停止。
      

  8.   

    其实java的GC机制并不能完全去除内存泄漏问题。GC启动的两个必要条件是:1、CPU有空闲;2、内存不足;但是这只是必要条件,满足这两个条件也不能肯定启动GC,至于强制启动GC并不会保证马上就可以进行内存回收。所以java的内存泄漏一直是个问题,尤其是swing。不过现阶段而言,也就只有GC能处理了:(
      

  9.   

    内存泄漏会抛出"java.lang.OutOfMemoryError"
      

  10.   

    在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。在Java中,这些不可达的对象都由GC负责回收,因此程序员不需要考虑这部分的内存泄露。市场上已有几种专业检查Java内存泄漏的工具,它们的基本工作原理大同小异,都是通过监测Java程序运行时,所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化。开发人员将根据这些信息判断程序是否有内存泄漏问题。这些工具包括Optimizeit Profiler,JProbe Profiler,JinSight , Rational 公司的Purify等。
      

  11.   

    JAVA并不会帮你处理内存泄漏问题
    如果java中的heap大小超过极限了,就会抛出OutOfMemory错误
    同意使用borland optimizeit profiler在系统运行时分析内存泄漏代码
      

  12.   

    内存泄漏问题 应该不会发生在JAVA身上,这是JAVA优于C++的特点之一!至于抛出"java.lang.OutOfMemoryError"异常,应该是maquan('ma:kju)提到的无意识保留。
      

  13.   

    Java Application程序内存泄漏检测方法http://blog.csdn.net/yaoyuhang/archive/2007/04/23/1575721.aspx
      

  14.   

    nirvana_li(东成西就,芝兰境界)说的对,Java确实有内存泄露的问题。
    网上随便一搜就有关于Java内存泄露的讨论,下面给出其中一个链接:
    http://www.zhujiangroad.com/html/soft/s2451.html
      

  15.   

    补充上面的一些回答
    我看的书上写的关于JAVA垃圾回收机制,是一个非规律性的操作,可以通过System.gc();人为执行。但是非特殊情况很少人用System.gc();方法