huweic
V2EX  ›  Java

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

  •  
  •   huweic · Mar 20, 2018 · 7802 views
    This topic created in 3155 days ago, the information mentioned may be changed or developed.
    35 replies  •  2018-04-05 21:14:00 +08:00
    madNeal
    madNeal
    Mar 20, 2018 via Android
    1
    疯狂占内存
    GuuJiang
    GuuJiang
    Mar 20, 2018 via iPhone
    2
    JNI,然后 native 代码里访问空指针
    notreami
    notreami
    Mar 20, 2018
    3
    System.exit(1);
    非正常推出,不用那么复杂吧?
    RubyJack
    RubyJack
    Mar 20, 2018
    4
    循环里一直 new
    lihongjie0209
    lihongjie0209
    Mar 20, 2018
    5
    递归 了解一下
    lihongjie0209
    lihongjie0209
    Mar 20, 2018
    6
    ```
    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
    stanjia
    Mar 20, 2018
    7
    楼主想哪 JVM 的哪块儿崩溃? 是栈还是堆,还是其它的常量区?
    lhx2008
    lhx2008
    Mar 20, 2018 via Android❤️4
    8
    栈溢出 无限递归
    堆溢出 塞对象过 jvm 内存 max 值
    方法区溢出 动态生成类(有点麻烦)
    ho121
    ho121
    Mar 20, 2018 via Android
    9
    1/0
    vegito2002
    vegito2002
    Mar 20, 2018 via iPad❤️2
    10
    爆栈爆堆这些 exception 不算 crash, 不要混淆这个概念;

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