2012-02-26 22 views
8

Me gustaría saber cómo comprobar si el compilador JIT está desactivado. Tengo el siguiente código que pretende apagar el compilador JIT. El problema es que no estoy seguro de si realmente está haciendo eso. Entonces me preguntaba si hay una manera de verificar si el JIT está apagado. Miré la clase del compilador pero no hay ningún método como isDisabled/enabled().Cómo comprobar si el compilador JIT está desactivado en Java

Código:

Compiler.disable(); 

Cualquier ayuda o dirección será altamente apreciado.

+0

¿Desea verificar esto en _runtime_? –

+0

Sí, me gustaría comprobarlo en tiempo de ejecución. – isaiah

+1

Quizás también debería agregar por qué estoy haciendo esto. Básicamente, tenemos un programa que tiene como objetivo medir el tiempo que se tarda en ejecutar un algoritmo (por ejemplo, quicksort) según el tamaño de los datos. Lo que notamos fue que las dos primeras veces son realmente sesgadas en comparación con los otros resultados y somos de la opinión de que esto se debe a la inicialización del compilador JIT. Como resultado, queríamos ver el efecto en los momentos en que el JIT está desactivado. – isaiah

Respuesta

10

No creo que pueda desactivar el JIT en tiempo de ejecución.

Si quiere comparar seriamente un programa Java, definitivamente debe ignorar las primeras ejecuciones. Conseguir puntos de referencia fiables en Java es un negocio muy complicado , es mejor dejar a la gente mucho más inteligente que tú o yo

recomiendo el uso de Caliper, que se utiliza internamente en Google para microbenchmarking y es un montón inteligente sobre el calentamiento del JIT y esas cosas En particular, observe el ejemplo here, que muestra cómo medir la eficiencia de un algoritmo para diferentes tamaños de entrada.

+0

Gracias Louis. Esto es para mi proyecto de último año. De hecho, consideramos ignorar las primeras carreras también. Supongo que es la opción más fácil por ahora. También miraré a Caliper. – isaiah

+0

¿El proyecto está implementando los algoritmos que está midiendo, o está haciendo el benchmarking? –

+0

Básicamente se ejecuta el algoritmo del usuario mediante la reflexión y luego analizarlo en términos de notación O. Además, lo que me confunde es, en el sitio de IBM (http://publib.boulder.ibm.com/infocenter/realtime/v1r0/index.jsp?topic=%2Fcom.ibm.rt.doc.10%2Frealtime%2Frt_jit .html), ¿dice cómo desactivar el compilador JIT o estoy malinterpretando el mensaje? – isaiah

4

Puede imprimir los métodos cuando se compilan, con `-XX: + PrintCompilation Si su método no se imprime o de repente se vuelve más rápido después de que se imprime, puede ver la causa probable.

20

(No es una respuesta directa a su pregunta, ya que parece que su trataban de apagar el compilador JIT mediante programación, pero en base a su comentario, esto podría ser de su interés.)

Si desea apagar el compilador JIT en un Sun/Oracle JVM, debe probar el -Xint option:

-Xint

operar en modo de sólo interpretado. La compilación con el código nativo está deshabilitada, y todos los bytecodes son ejecutados por el intérprete. Los beneficios de rendimiento ofrecidos por el compilador adaptativo de la VM cliente de Java HotSpot no estarán presentes en este modo.

+0

Gracias por la información sobre -Xint Bruno. – isaiah

+0

¿Hasta qué versión de Java es compatible? porque estoy obteniendo 'javac: flag inválido: -Xint'. –

+0

@ErikAllik Está disponible en las opciones cuando escribe 'java -X' en Oracle JRE 8. El uso o no del compilador JIT es una decisión de JRE, esto no tiene nada que ver con la compilación del código fuente en bytecode (qué' javac 'does): probablemente estés obteniendo este error porque lo estás usando con' javac' not 'java'. – Bruno

7

IBM JVM definitivamente son compatibles con la interfaz de Java java/lang/Compiler.disable() y .enable() que se introdujo en Java 5, creo. Eso incluye WebSphere Real Time (que es una JVM diseñada para proporcionar un rendimiento más predecible), así como nuestras JVM "estándar". Si llama a disable(), evitará las compilaciones de JIT hasta que llame a enable().

Trabajo para IBM en el equipo del compilador JIT. Normalmente no recomendamos que las personas utilicen esta interfaz, ya que interferir con la heurística de compilación de JIT generalmente no es una buena idea, pero existen escenarios razonables en tiempo real donde la usaría.

6

En el artículo Performance Features and Tools.

El compilador JIT se hizo por primera vez disponible como una actualización de rendimiento en versión de software 1.1.6 del Java Development Kit (JDK) y es ahora una herramienta estándar invoca cada vez que se utiliza el comando intérprete java en Java Lanzamiento de la plataforma 2

Puede desactivar el compilador JIT utilizando la opción -Djava.compiler=NONE para Java VM.

Por lo tanto, puede deducir que cuando la variable no está configurada o configurada en algo distinto de NINGUNO, entonces el JIT está habilitado.

+0

Sí. Esta funcionando. ¿Cómo saber el valor actual de Djava.compiler? – apm

Cuestiones relacionadas