Colgando creativamente la JVM

Hay veces que está bien ser constructivos, pero en otras el lado oscuro tampoco está tan mal. Como desarrolladores Java a veces vemos como la máquina virtual java se cuelga o se cae porque hacemos algo mal o por limitaciones del sistema… ¿Pero podemos hacer que se cuelgue de forma deliberada y sin mucho esfuerzo? Vamos a ver unos cuantos métodos.

– Stack Overflow:

public class JVMCrashTest {

public static void main(String[] args){

main(args);

}

}

Exception in thread “main” java.lang.StackOverflowError

– Memoria insuficiente:

public class JVMCrashTest {

public static void main(String[] args){

Integer integers[] = new Integer[Integer.MAX_VALUE];

}

}

Exception in thread “main” java.lang.OutOfMemoryError: Requested array size exceeds VM limit

– Otro error por falta de memoria. Se pueden utilizar distintas estructuras de datos, en la variedad está el gusto:

Import java.util.*;

public class JVMCrashTest {

public static void main(String[] args){

ArrayList list = new ArrayList();

for (int i = 0 ; I < Integer.MAX_VALUE; i++) {

list.add( new Object());

}

}

}

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Si conocéis algún otro método creativo, podéis compartirlo… pero siempre sin malicia 😉

Respuestas

  1. Qué ganas de tocar las narices 😛

  2. Avatar de Daniel Ayuso de Santos
    Daniel Ayuso de Santos

    Uuuu la verdad es que «colgar» la máquina virtual es más fácil que ni sé. Originales o no ahí van algunos…

    – java.lang.IndexOutOfBoundsException

    import java.util.*;

    public class JVMCrashTest {

    public static void main(String[] args){

    List list = new ArrayList();

    System.out.println(list.get(1));
    }

    }

    – java.lang.ClassCastException
    import java.util.*;

    public class JVMCrashTest {

    public static void main(String[] args){

    List list = new ArrayList();
    list.add(new String(«»));

    System.out.println((Integer)list.get(0));
    }

    }

    – java.lang.NullPointerException
    import java.util.*;

    public class JVMCrashTest {

    public static void main(String[] args){

    List list = null;

    System.out.println(list.get(0));
    }

    }

    Buf y se me ocurren otros… pruff… Pero xD ahora que me estoy dando cuenta que «tonta» es la máquina o el compilador, la verdad es que muchos de estos se podrían solventar antes sin llegar a la ejecución…

  3. Avatar de Silvestre Terrazas
    Silvestre Terrazas

    Daniel Ayuso sos medio tapao no? , lo que vos estas haciendo es cometer errores de programacion, no es ni por cerca lo que propone este post!!

  4. Hombre, la cuestión era consumir los recursos de la JVM… pero desde el cariño 🙂

  5. Avatar de Daniel Ayuso de Santos
    Daniel Ayuso de Santos

    Jejeje, entendí un poco mal el post y se puede borrar o puedo borrar mi comentario sin problemas si queréis 😉
    Está claro que lo que puse son fallos garrafales de programación y quizá para alguien que lleve bastante tiempo programando son inconcebibles pero… ¿y si se trata de un novato? ¿de un aprendiz?. Creo que son errores obvios que el compilador de Java no debería dejarlos pasar a ejecución puesto que son triviales y se ve claramente que petará. Eso, o que al menos avise ¿No lo creeis así?
    PD. Quizá los haya y no los conozca…

Replica a Angel L. Antón Alcalde Cancelar la respuesta