可能是操作系统的问题?
用java的源文件在系统里重新编译一下看看,安装的时候可能会有问题
上次用FreeBSD就是编译源文件装的jdk,之前的都有些问题

解决方案 »

  1.   

    没有用过大型机,不过在linux下jdk的垃圾回收和window的确不同,你试试加入语句强行让g清除垃圾看看.
            …………    
         }catch (Exception e) {
          System.out.println(e);
         }
             g.finalize();//强行指定g 清除垃圾看看? g对象占用内存肯定N大
        }
        
        public void setName(String s)
        {
            name = s;
        }
      

  2.   

    有很多问题。
    在需要长时间运行的程序中,new 尽量少用。 一个 new 相当于一千个以上复制语句。性能不好,内存也不能回收。
      

  3.   

    搂主重新Make一下,在普通及其上没有问题,在大型机上也是一样的阿!问题一般是出在Make上的!
      

  4.   

    会不会是因为不同操作系统其不同的JDK所造成的影响?建议用aix专用的JDK在目标服务器上重新编译再试试,并且保证与测试成功时的开发环境版本一致。不知原因时也只能采用测试硬件时最常用的笨办法——替换法了,呵呵。
      

  5.   

    建议楼主把代码Copy到曙光机器上去编译,运行试试。而且JDK版本和你单机开发的版本最好保持一致。Good Luck
      

  6.   

    能肯定是你所说的问题嘛?
    你用线程了吗?你用的sun10000等大型机是多cpu的吗?也有可能是线程上出的问题。
      

  7.   

    针对上面朋友的回答我再说明一下……
    全部程序已经在相应的机器上编译通过……编译没有问题。同样上面的测试代码在上面都会出错……
    同样,已经测试过强制使用gc()来回收内存……但是,结果一样,没用。
    今天中午测试的用到Runtime().totleMemory()和Runtime().freeMemory()两个方法来检测内存,发现内存可以回收,但进程内存使用数同样直线上升,达到1G……而且不断上升……现在应该排除程序问题。但对于drawString()方法,如果我注释掉以后,内存就不再出现狂涨的现象……实在不解……大家再给想想,谢谢
      

  8.   

    qqbz(qqbz) ( ) 
    能肯定是你所说的问题嘛?
    你用线程了吗?你用的sun10000等大型机是多cpu的吗?也有可能是线程上出的问题。
    ========================================================================根本就没有用到多线程,
    我用上面的代码测试都通不过……
      

  9.   

    搂主可以在那鸟鸡上用eclipse或者JB进行断点测试,主要看graphics使用的临时资源。
      

  10.   

    这个大型机用的系统可能是Solaries , Solaries 的线程和windows 和 Linux的线程不同,Windwos和Linux的线程会自动切换,但Solaries 的线程除非你明确指示,否则会一直执行.drawString在底层用了线程,我猜应该是这个原因。   如果你的操作系统不是Solaries , 则我错了。
      

  11.   

    Graphics2D g = (Graphics2D) image.getGraphics();
    会创建一个新的Graphics2D对象,而Graphics2D对象是本地对象,需要手工清楚的。
    在使用完Graphics2D后调用g.dispose()方法。
      

  12.   

    game0ver12345(sfsfdsfdsdfsf) 我现在不能确定你说的是不是正确,但的确是有一台sun10000用的是Solaris的操作系统上出的问题……另一个操作系统是AIX4.3的。我想请教一下,如果是线程的问题,我应该如何来关闭已经打开的drawString线程呢?好像没有办法通过java的内部方法来实现吧?是不是要调用系统的命令来实现这一操作呢?
    请指教,谢谢!
      

  13.   

    最近用java画图……然后传到服务器上对外发布……本机测试没有任何问题……可是传到大型机……sun10000/曙光2000等机器上运行后,发现内存狂涨,出现不能回收的问题……
    进行测试发现问题出在drawString()上……每次drawString后,内存都会有规律的增加,并且不回收……直到关闭服务……
    =========================================你这种问题应该是正常的,内存管理由JVM管理,“内存都会有规律的增加,并且不回收……直到关闭服务……” , 因为每一个操作系统上的JVM实现是不同的,所以这个问题应该是正常的。   由于Solaries的线程和WINDOWS ,LINUX线程有比较大的差异,所以关于线程的管理,Solaries的和WINDOWS , LINUX的有非常的不同    g.drawString() 会立刻返回的,这个方法会产生一个线程去画图,于是它就可以继续执行了。基本上JAVA所有界面处理都有线程的。    Solaries的线程是绿色线程,如果没有明确指示,它会一直执行到底,WINDOWS ,LINUX线程即使没有明确指示,系统都会自动切换线程的。
        总的说来,你的问题不是问题,它是正常的,不同的JVM有不同的策略。由于Solaries和普通的操作系统的线程有很大的不同,所以遇到线程时,SolariesJVM和普通操作系统的内存管理有很大的不同
      

  14.   

    to:tiger_wkh52741(走走.跑跑.瞧瞧!)
    “难道你没有考虑哪个地方需要释放内存吗”天哪!混到了五个三角的朋友,你不知道Java不能显式释放内存吗?我的看法:你的代码在某个地方碰到了和虚拟机的实现方式相关的东西,就是说你代码的正常运行依赖于特定的虚拟机实现,所以换一个虚拟机就不行了。由于我没学过图形包,所以也不知道到底是哪里出了问题……
      

  15.   

    output.close();
     在输出图象后关闭 output 试试.
      

  16.   

    眼花了,已经有了.
    如果不drawString,其它操作会吗?
      

  17.   

    game0ver12345(sfsfdsfdsdfsf)
        总的说来,你的问题不是问题,它是正常的,不同的JVM有不同的策略。由于Solaries和普通的操作系统的线程有很大的不同,所以遇到线程时,SolariesJVM和普通操作系统的内存管理有很大的不同
    ===========================================================================真的不成问题吗?它的内存是要增加,但是,我38G的内存,不光要跑这一个服务啊……吃掉我5个G的内存我还能够用,但是到了10G,还不去回收,呵呵,你说算不算问题呢?
    我别的程序还要运行在上面的……
    我建议你找本java虚拟机的书再看看,java对内存的管理。虚拟机对内存的管理我也只了解大概和你说一下,首先java的虚拟机开一块专用的内存区用来做为java专用的内存区,所有java程序的内存分配都在这一块,到内存使用到一定程度的时候,jvm自动进行gc回收无用的内存(这个过程,可以认为是随机的)。
    至于你说的solaris方面的线程这个问题,我还真的不了解。
    但我知道,我在一台小的服务器上调试的时候,不会出现这个问题,装的是solaris的 :(
    所以,我非常的郁闷……还有别的什么可能呢?帮我想一下
      

  18.   

    回复人: chmask(努力学java……) ( ) 信誉:100  2004-04-20 12:34:00  得分:0 
     
     
      game0ver12345(sfsfdsfdsdfsf)
        总的说来,你的问题不是问题,它是正常的,不同的JVM有不同的策略。由于Solaries和普通的操作系统的线程有很大的不同,所以遇到线程时,SolariesJVM和普通操作系统的内存管理有很大的不同
    ===========================================================================真的不成问题吗?它的内存是要增加,但是,我38G的内存,不光要跑这一个服务啊……吃掉我5个G的内存我还能够用,但是到了10G,还不去回收,呵呵,你说算不算问题呢?
    我别的程序还要运行在上面的……
    我建议你找本java虚拟机的书再看看,java对内存的管理。虚拟机对内存的管理我也只了解大概和你说一下,首先java的虚拟机开一块专用的内存区用来做为java专用的内存区,所有java程序的内存分配都在这一块,到内存使用到一定程度的时候,jvm自动进行gc回收无用的内存(这个过程,可以认为是随机的)。
    至于你说的solaris方面的线程这个问题,我还真的不了解。
    但我知道,我在一台小的服务器上调试的时候,不会出现这个问题,装的是solaris的 :(
    所以,我非常的郁闷……还有别的什么可能呢?帮我想一下
     
     
    ===============================================================jvm 会自动收集垃圾的,基本上每个JVM都有自己收集垃圾的策略, “吃掉我5个G的内存我还能够用,但是到了10G,还不去回收”   当JVM吃了5个G的内存时不收集垃圾,但它可能吃10G的时候会收集垃圾。      所以你以为JVM会一直不收集垃圾直到你的机器死掉的想法是不可能发生的。     你可以把total_number改大100倍,看机器会不会死掉?