我试着用死循环里不挺的new对象,但是观察内存发现虽然销号内存,但是过了一会内存的值又自动上来了,好像是系统自动运行了gc,请问有什么办法能让系统死机呢? 或者说能尽快的把内存耗光呢?分不够再加

解决方案 »

  1.   

    设置一个没有没回返回的递归调用,还有就是尽量把这个方法里的东东写得复杂一点,for example:public void recursiveMethod()
    {
        for(int i=0; i<10000; i++)
            i += i;
        
        recursiveMethod();
    }
      

  2.   

    不停地递归调用,最多JVM会抛出stackoverlowerror, 但不会死机,你说的死机可能的原因是内存耗尽,或占用了100%CPU, 可以在你的程序中,创建大量线程,并无限等待,无人来notify.
      

  3.   

    好像很难。偶没有听说过java可以搞垮os,jni之类的除外
      

  4.   

    打开 Socket,不停的连接后不关 , 不停的创建临时文件,超出用户配额,
    无穷递归,占着茅坑不拉屎 , 死循环。好像有时候只是 占用 100%, 并不死。
      

  5.   

    同意楼上的,windows下用C要系统死还是容易的
    不过linux/solaris/unix下就难了(除非你有root权限)
      

  6.   

    同意楼上的,lz的方法肯定值得商榷,别忘了java的垃圾回收阿,这种resource leak很难成功
      

  7.   

    好像很难。偶没有听说过java可以搞垮os,jni之类的除外
    我同意这种观点
    如果仅仅是要让内存耗或者cpu耗完很容易,但这样最多抛出一个异常,程序中止,但是不会影响到操作系统的,如果要耗完内存太容易了。如果使用JNI肯定可以,但这样就不是纯java程序了。
      

  8.   

    要耗尽内存很容易,写个无穷递归,里面有分配空间的就可以了但这是虚拟机限制范围内的内存限制,根本不可能搞垮os要搞垮os,window下最好就是用jni调c函数。linux/unix/solaris就相当困难了,除非你有root权限
      

  9.   

    怎么刚delphi版的一个人要问怎么让系统死机,刚转到java版又来一个
    呵呵
      

  10.   

    能开文件,开sock,导致系统不正常,但是要死机估计是很难,VM很难把系统搞垮
      

  11.   

    我看啊干脆把机子砸了算了,让他死了再也起不来,用纯java是不可能做到的,如果能让你这样,java的优势都是说出来的?
      

  12.   

    hehe,估计你淘来个486机器可以实现你的愿望,楼上说的有理,java的机制就是不让程序员为系统资源耗费更多精力,所以你也不要耗费精力了,还是研究怎么把0.1的程序变成0.01的吧
      

  13.   

    难...........................
    调用windows的程序吧....要不很难弄死机.........................
      

  14.   

    坐下好好学习中...
    -------------------------------------------------------------------------
    您好,网美书店全场5折-8.8折,深圳东莞所有地区送书上门(免配送费),书到付款!网美书店网址:http://www.wanme.com咨询QQ:  419777139
      

  15.   

    都是一群疯子,为什么想让糸统死机,我在windws用汇编写一个极大的循环中写了一句winexec调用外部程序,结果糸统马上没反应
      

  16.   

    干吗啊?写这种程序搞什么呀,VM实际上在外面挡着,不可能死机的,顶多程序down掉
      

  17.   

    想要系统宕掉就要先菪掉VM,但是宕了VM,程序也就宕了,好像纯JAVA很难阿
      

  18.   

    用JNI啦。上面很多方法都只是让JVM死掉,但系统还没有。只有用JNI调用系统底层的API才能彻底。
      

  19.   

    Runtime.getRuntime().exec("shutdown -r");XP/unix 下应该有效
      

  20.   

    释放锁时用对象.wait()还是用线程的wait()方法
      

  21.   

    释放锁时用对象.wait()还是就用wait(),就用wait()是不是线程的方法。
      

  22.   

    楼主试试swt os类扩展。。
    http://www.eclipseworld.org/read.php?tid=69&fpage=1或自已向下扩展些API。。试试疯狂hook windows进程hoho~~
      

  23.   

    大家的回答真是不到位啊,谁说java的程序不能死机啊,下面我给大家一个简单的代码,当然还有很多种方式的,不过问题的关键是在java运行的时候需要给jvm一些参数:
    public class Virus{
        public static void main(String args[]) throws Exception{
            for(int i = 1;;i++){
                double dv[][][][][][] = new double[i][i+1][i+1][i+1][i+1][i+1];
                try{
                dv[i-1][i-1][i-1][i-1][i-1][i-1] = Double.MAX_VALUE;
                System.out.println("dv["+i+"]["+i+"]["+i+"] = "+dv[i-1][i-1][i-1][i-1][i-1][i-1]);
                }
                catch(Exception e){}
            }
        }
    }
    java -Xms256m -Xmx256m Virus
    注: 这里的内存设置为和你的物理内存一样大就可以。
    另外,用线程的方式也是可以的,或者疯狂的读大的IO,然后用每次一个byte的方式读出来,效果明显。最后感谢大家的积极参与。