2010-09-29 28 views
13

Al tratar de optimizar C y LISP, mirar el código de ensamblador generado por el compilador puede ser de gran ayuda.¿Cómo puedo examinar el bytecode JVM para una función clojure?

Probablemente Clojure se compila en un bytecode JVM que sería igualmente útil.

¿Cómo puedo verlo?

+4

Tenga en cuenta que la optimización del bytecode podría no producir ningún resultado positivo. Ver [esta entrevista] (http://java.sun.com/developer/technicalArticles/Interviews/goetz_qa.html#CodePerformsWell). Habla de escribir Java, pero básicamente se aplica a todos los idiomas que producen bytecode. –

Respuesta

11

Clojure compila dinámicamente todo el código Clojure de código de bytes en el tiempo de ejecución. No estoy seguro de cómo puede ver este bytecode compilado dinámicamente. Sin embargo, usted puede hacer Ahead Of Time (AOT) compilación de su código Clojure usted mismo y que generará archivos .class. Luego puede usar javap para ver el bytecode.

Utilice la función compile en Clojure/núcleo para compilar su espacio de nombres:

compilar función

Uso: (compilar lib)

compila el espacio de nombres llamado por el símbolo lib en una conjunto de classfiles. El origen de la lib debe estar en un directorio relativo a la ruta de clase . Los archivos de salida entrarán en el directorio especificado por compile-path, y ese directorio también debe estar en el classpath.

A continuación, utilice javap:

javap -l -c -s -private MyClass 
+0

¡Dulce! Muchas gracias. –

+1

Tenga en cuenta que debe dejar la extensión .class. Me confundió por un minuto más o menos. –

3

Algunas soluciones hechas a mano:

+1

¿Puedo preguntar por qué el voto abajo? Hasta donde yo sé, estas son respuestas válidas sobre cómo examinar el bytecode de los archivos de clase compilados, por lo que son relevantes para Clojure. Tal vez hay una manera más Clojure-y, pero todavía funciona igual de bien. Si algo que digo es incorrecto, por favor díganme qué y por qué. – haylem

+4

Sospecho que no votaste porque dijiste "Google it".Es un conocimiento general de SO que una pregunta bien planteada y seria que no se haya formulado antes de SO es una buena pregunta. La idea es que SO forme parte de los resultados de google. – Rayne

+0

Ah. Eso suena bastante justo, aunque no quise decirlo como una reducción del OP e implicar pereza por su parte, solo que proporciona respuestas intemporales con buenos resultados considerando que es una pregunta bastante común para los lenguajes JVM. Mi mal, lo haré mejor la próxima vez. – haylem

Cuestiones relacionadas