V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huweic
V2EX  ›  Java

怎样写一个程序迅速地让 JVM 崩溃

  •  
  •   huweic · 2018-03-20 10:54:50 +08:00 · 6635 次点击
    这是一个创建于 2442 天前的主题,其中的信息可能已经有所发展或是发生改变。
    35 条回复    2018-04-05 21:14:00 +08:00
    madNeal
        1
    madNeal  
       2018-03-20 11:03:48 +08:00 via Android
    疯狂占内存
    GuuJiang
        2
    GuuJiang  
       2018-03-20 11:04:36 +08:00 via iPhone
    JNI,然后 native 代码里访问空指针
    notreami
        3
    notreami  
       2018-03-20 11:14:17 +08:00
    System.exit(1);
    非正常推出,不用那么复杂吧?
    RubyJack
        4
    RubyJack  
       2018-03-20 11:27:00 +08:00
    循环里一直 new
    lihongjie0209
        5
    lihongjie0209  
       2018-03-20 11:29:43 +08:00
    递归 了解一下
    lihongjie0209
        6
    lihongjie0209  
       2018-03-20 11:34:26 +08:00
    ```
    public class test {

    public static void main(String[] args) {
    long sum = sum(1, 100000);

    System.out.println(sum);
    }


    public static long sum(int start, int end) {

    System.out.println("sum is called!!");

    if (start == end) {
    return start;
    }else{

    return sum(start, end - 1) + end;


    }



    }
    }



    sum is called!!
    sum is called!!
    sum is called!!
    Exception in thread "main" java.lang.StackOverflowError
    at java.io.PrintStream.write(PrintStream.java:526)
    at java.io.PrintStream.print(PrintStream.java:669)
    at java.io.PrintStream.println(PrintStream.java:806)
    at test.sum(test.java:12)
    at test.sum(test.java:18)
    at test.sum(test.java:18)


    ```
    stanjia
        7
    stanjia  
       2018-03-20 11:36:08 +08:00
    楼主想哪 JVM 的哪块儿崩溃? 是栈还是堆,还是其它的常量区?
    lhx2008
        8
    lhx2008  
       2018-03-20 11:48:24 +08:00 via Android   ❤️ 4
    栈溢出 无限递归
    堆溢出 塞对象过 jvm 内存 max 值
    方法区溢出 动态生成类(有点麻烦)
    ho121
        9
    ho121  
       2018-03-20 12:28:04 +08:00 via Android
    1/0
    vegito2002
        10
    vegito2002  
       2018-03-20 12:42:15 +08:00 via iPad   ❤️ 2
    爆栈爆堆这些 exception 不算 crash, 不要混淆这个概念;

    这个帖子里有具体的讨论:
    https://stackoverflow.com/questions/65200/how-do-you-crash-a-jvm
    huweic
        11
    huweic  
    OP
       2018-03-20 12:53:07 +08:00
    @vegito2002 哈哈,我就是看了 stackoverflow 这个问题才发的这个帖子,想跟大家讨论一下
    huweic
        12
    huweic  
    OP
       2018-03-20 12:53:53 +08:00
    @stanjia 都可以啊,炸了就行
    huweic
        13
    huweic  
    OP
       2018-03-20 12:57:07 +08:00
    @ho121 这个应该只是算异常,JVM 并没有崩溃,catch 一下就能继续跑了
    lovelybear
        14
    lovelybear  
       2018-03-20 13:02:07 +08:00 via Android
    死循环
    Len1133
        15
    Len1133  
       2018-03-20 13:38:31 +08:00
    拔插头
    qwertty01
        16
    qwertty01  
       2018-03-20 13:56:32 +08:00
    如何写个软件让 windows 奔溃?
    ovear
        17
    ovear  
       2018-03-20 14:00:03 +08:00
    jni,然后写点越界。
    lastpass
        18
    lastpass  
       2018-03-20 14:19:02 +08:00 via Android
    你可以试着通过 JAVA 调用错误的 dll。
    JVM 必崩😂😂
    为什么我知道?
    因为我这里有一个 JAVA 程序就是通过调用 dll 进行授权的。
    经常性崩溃。
    从头崩到尾。
    无论我写啥异常处理办法都没用。
    ly529
        19
    ly529  
       2018-03-20 15:48:42 +08:00
    while(true)
    Amayadream
        20
    Amayadream  
       2018-03-20 15:55:48 +08:00
    @vegito2002 #10 你这个链接有点赛艇
    huweic
        21
    huweic  
    OP
       2018-03-20 16:25:49 +08:00
    @qwertty01 😂😂 求教
    wweir
        22
    wweir  
       2018-03-20 17:54:15 +08:00 via Android
    给自己的 pid 发个 kill 信号,算么?
    Zz0Zz
        23
    Zz0Zz  
       2018-03-20 18:01:04 +08:00
    写个死循环,每次放 1million 大对象,立马把你的 jvm 干爆
    zengmingyang96
        24
    zengmingyang96  
       2018-03-20 18:10:28 +08:00 via Android
    @lihongjie0209 这个 error 是可以捕获的
    lihongjie0209
        25
    lihongjie0209  
       2018-03-20 18:12:47 +08:00
    @zengmingyang96 #24 捕获 error 干嘛
    zengmingyang96
        26
    zengmingyang96  
       2018-03-20 18:15:30 +08:00
    @lihongjie0209
    如果 try catch 了,JVM 不会崩溃啊。。。
    stanjia
        27
    stanjia  
       2018-03-20 19:32:28 +08:00
    这里关键是要 通过 -Xss256m -Xms512m -Xmx800m -XX:MaxPermSize=512m 等,把虚拟机内存设置成 1MB 或者更小,不然,默认设置的情况下,你想让 java 不管哪块儿爆掉 还是有点难
    fork
        28
    fork  
       2018-03-20 19:38:04 +08:00
    kill -4 java_process_pid
    applehater
        29
    applehater  
       2018-03-20 20:28:39 +08:00 via iPhone
    JNA 随便写一下就会错了。
    zk123
        30
    zk123  
       2018-03-20 21:03:57 +08:00 via Android
    for(int i=0; i < 3 ; i ++){
    System.out.println("我是帅哥");
    }
    opengps
        31
    opengps  
       2018-03-21 08:42:56 +08:00
    这是要埋个雷,作为后期付费改善功能?
    owenliang
        32
    owenliang  
       2018-03-21 10:15:14 +08:00 via Android
    递归导致栈溢出最快。
    fancyhan
        33
    fancyhan  
       2018-03-21 10:19:30 +08:00
    @stanjia 阁下是高手
    springGun
        34
    springGun  
       2018-03-21 10:38:12 +08:00
    实战 java 虚拟机 上全是案例 ,所有你想 OOM 的 JVM 区域都有
    Fri
        35
    Fri  
       2018-04-05 21:14:00 +08:00
    int[] arr = new int[999999999^999999999];
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3625 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 04:50 · PVG 12:50 · LAX 20:50 · JFK 23:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.