Vine aquí porque también encontré esta pregunta en The Passionate Programmer, por Chad Fowler. Para aquellos que no tienen acceso a una copia, la pregunta se enmarca como una especie de filtro/prueba para los candidatos que se entrevistan para un puesto que requiere "muy buenos programadores de Java".
Específicamente, se pregunta:
How would you write a program, in pure Java, that would cause the Java Virtual Machine to crash?
He programado en Java por más de 15 años, y me encontré con esta pregunta para ser a la vez desconcertante e injusta. Como han señalado otros, Java, como lenguaje administrado, está específicamente diseñado para no bloquear. Por supuesto, siempre hay errores de JVM, pero:
- Después de más de 15 años de JRE de nivel de producción, es raro.
- Cualquiera de estos errores es probable que se parcheen en la próxima versión, entonces, ¿qué tan probable es que usted como programador se tope y recuerde los detalles del conjunto actual de JRE show-stoppers?
Como han mencionado otros, algunos códigos nativos a través de JNI son una forma segura de bloquear un JRE. Pero el autor mencionó específicamente en Java puro, así que está fuera.
Otra opción sería alimentar los códigos de byte falsos de JRE; que es bastante fácil para volcar algunos datos binarios de basura en un archivo .class, y pedir el JRE para ejecutarlo:
$ echo 'crap crap crap' > crap.class
$ java crap
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1668440432 in class file crap
¿eso cuenta? Quiero decir que el JRE en sí no se ha estrellado; detectó correctamente el código falso, lo informó y salió.
Esto nos deja con los tipos más obvios de soluciones como soplar la pila por recursión, quedarse sin memoria del montón a través de asignaciones de objetos o simplemente lanzar RuntimeException
. Pero esto solo hace que JRE salga con una excepción StackOverflowError
o similar, que, de nuevo, no es realmente una falla.
¿Qué queda? Realmente me encantaría escuchar lo que el autor realmente tenía en mente como una solución adecuada.
Actualización: Chad Fowler responded here.
PD: es un gran libro por lo demás. Lo recogí para obtener apoyo moral mientras aprendía Ruby.
Apasionado programador, sí, gran libro;) – dolzenko
superconjunto de Posible: http://stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java –
https://stackoverflow.com/questions/30072883/java-swing-jwindow-application-crash "Si uso JDK1.8_40 o posterior (Oracle o OpenJDK do lo mismo), el siguiente código junto con un cambio de tamaño del cuadro de diálogo bloqueará la aplicación (se intentó con Windows 7, x64, JDK de 64 bits) ": el código tiene solo 40 líneas y causa un * bloqueo adecuado * de la JVM. –