Vine aquí porque también me encontré con esta pregunta en The Passionate Programmer , de 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 "realmente buenos programadores de Java".
Específicamente, él pregunta:
¿Cómo escribiría un programa, en Java puro, que causaría el bloqueo de la máquina virtual Java?
He programado en Java durante más de 15 años, y esta pregunta me pareció desconcertante e injusta. Como otros han señalado, Java, como lenguaje administrado, está específicamente diseñado para no bloquearse . 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.
- Es probable que dichos errores se reparen en la próxima versión, entonces, ¿qué tan probable es que usted, como programador, se encuentre y recuerde los detalles del conjunto actual de JRE show-stoppers?
Como otros han mencionado, 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 eso está fuera.
Otra opción sería alimentar los códigos de bytes falsos de JRE; es bastante fácil volcar algunos datos binarios basura en un archivo .class y pedirle al JRE que lo ejecute:
$ 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 volar la pila a través de la recursión, quedarse sin memoria de almacenamiento dinámico a través de asignaciones de objetos o simplemente lanzar RuntimeException
. Pero esto solo hace que el JRE salga con una StackOverflowError
excepción o similar, que, de nuevo, no es realmente un bloqueo .
Entonces, ¿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 respondió aquí .
PD: es un gran libro. Lo recogí como apoyo moral mientras aprendía Ruby.