J'écris ma propre copie de la JVM et je voudrais tester son comportement sur certaines opérations numériques simples, telles que les ajouts, les soustractions, les dépassements numériques, etc. Plutôt que d'écrire le bytecode à la main, je pensais que ce serait un bonne idée de simplement écrire du code Java, javac
le compiler en bytecode, puis tester la JVM sur ce bytecode.Désactivation de l'optimisation dans javac?
Le problème est que javac
fait beaucoup d'optimisations en ligne (très raisonnables!) Qui empêchent le code de tester ce que je voudrais tester. Par exemple, un test tente de vérifier que les débordements intégraux sont gérés correctement pour tous les types. Voici un aperçu:
byte min = (byte)-128;
byte max = (byte) 127;
assertTrue((byte)(max + 1) == min); // Should overflow and work correctly.
Le fichier généré .class
a le résultat de ((byte)max + 1)
hardcoded comme (byte) -128
, qui contrecarre complètement le point de l'essai.
Ma question est la suivante: Y at-il un moyen de désactiver l'optimisation dans javac
? Je n'ai pas réussi à trouver un commutateur de ligne de commande pour le faire, même si je n'ai peut-être pas regardé assez fort. S'il n'y a aucun moyen de faire cela, existe-t-il un autre compilateur Java qui a la capacité de compiler avec toutes les optimisations désactivées?
Je ne l'ai pas entendu parler de Jasmin! C'est un lien plutôt sympa. Je dois peut-être enquêter là-dessus. – templatetypedef