Estoy escribiendo mi propia copia de la JVM y me gustaría probar su comportamiento en algunas operaciones numéricas simples, como adiciones, restas, desbordamiento numérico, etc. En lugar de escribir el bytecode a mano, pensé que sería una buena idea simplemente escribir código Java simple, tener javac
compilarlo en bytecode, y luego probar la JVM en ese bytecode.¿Desactivar la optimización en javac?
El problema es que javac
está realizando muchas optimizaciones en línea (¡muy sensatas!) Que evitan que el código pruebe lo que me gustaría que probara. Por ejemplo, una prueba intenta verificar que los desbordamientos integrales se manejen correctamente para todos los tipos. He aquí una instantánea:
byte min = (byte)-128;
byte max = (byte) 127;
assertTrue((byte)(max + 1) == min); // Should overflow and work correctly.
El .class
archivo generado tiene el resultado de ((byte)max + 1)
hardcoded como (byte) -128
, lo que contradice por completo el punto de la prueba.
Mi pregunta es esta: ¿hay alguna manera de deshabilitar la optimización en javac
? No he podido encontrar un modificador de línea de comandos para hacer esto, aunque tal vez simplemente no he buscado lo suficiente. Si no hay forma de hacerlo, ¿hay otro compilador de Java que tenga la capacidad de compilar con todas las optimizaciones desactivadas?
no he oído hablar de Jasmin! Ese es un enlace genial. Puede que tenga que investigar esto. – templatetypedef