2010-10-23 37 views
9

Je rencontre un problème dans mon application Java où le JIT casse le code. Si je désactive le JIT, tout fonctionne bien, mais il tourne 10-20x plus lentement.Désactiver Java JIT pour une méthode/classe spécifique?

Y at-il un moyen de désactiver le JIT pour une méthode ou une classe spécifique?

Edit: J'utilise Ubuntu 10.10, obtenir les mêmes résultats à la fois avec:

OpenJDK Runtime Environment (IcedTea6 1.9) (6b20-1.9-0ubuntu1) 
OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode) 

et:

Java(TM) SE Runtime Environment (build 1.6.0_16-b01) 
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode) 
+0

Avez-vous un rapport de bogue déjà? Ou avez-vous trouvé un bug existant, qui décrit votre problème? – soc

+0

Cela semble très improbable que cela soit dû au JIT, non? Cela ne pourrait pas être dû à une condition de course (puisque le timing change quand vous désactivez jit) ... – aioobe

+0

Je n'utilise qu'un seul thread. Je suis occupé à regarder le bug, mais je n'ai pas vraiment le temps maintenant. Le bogue se produit systématiquement après qu'une méthode spécifique a été compilée par le JIT. Pour l'instant, je ne fais que définir l'option -XX: CompileThreshold assez haut. – Ralf

Répondre

6

L'option suivante fonctionne sur mes JVMs, d'exclure une méthode spécifique:

-X:CompileCommand=exclude,the/package/and/Class,methodName 
+1

Sun/Oracle Java 6 et au-dessus, utilisez l'option '-XX: CompileCommand'. Voir les options ['java' pour plus d'informations] (https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html), en particulier pour v8. –

+1

Désolé de déterrer un tel post ancien; si je devais l'utiliser avec une classe interne nommée, la délimiterais-je par "com/domain/package/Outer/Inner" ou "com/domain/package/Outer $ Inner"? – hexafraction

6

Oui, il existe. Vous pouvez fournir les classes concernées que vous voulez exclure la compilation JIT au démarrage:

-Xjit:exclude={package/class.method|package/class.method} 
+1

Je reçois "Option non reconnue: -Xjit: exclude = {...} Impossible de créer la machine virtuelle Java." – Ralf

+0

Mhhh ... définitivement bizarre. – soc

+2

Les options -X ne sont pas standard. Ils peuvent changer d'une version à l'autre et dépendent de votre JVM –