2010-06-07 21 views
49

¿Hay alguna forma de compilar desde Java a un código de máquina independiente (o biblioteca) sin requerir una JVM?¿Puedo compilar Java con código nativo?

+2

"compilar" es la palabra que está buscando (en lugar de "compilar"). –

+4

Si su interés es la velocidad, no se moleste a menos que esté buscando una plataforma que HotSpot (JVM de Sun) no admita. HotSpot compila bytecode a código nativo sobre la marcha donde aparece un "punto de acceso" de la ruta de ejecución (algo que se ejecuta mucho), y es muy bueno en eso. Pero si está tratando de evitar la necesidad de una JVM, sí, mire la contraseña que James le indicó. –

+1

Otra razón más es la protección contra los decompiladores de Java. En cuanto a HotSpot vs compilador nativo (vs JRockit vs IBM vs GCC vs Visual C++ vs mano-escritura-CPU-instrucciones-en-hex), depende de la aplicación, por lo que YMMV. –

Respuesta

33

Solía ​​haber una herramienta llamada GCJ que formaba parte de GCC, pero es been removed. Ahora, todos los enlaces en el sitio de GCC se redireccionan a sus equivalentes que no pertenecen a GCJ.

NB: todos los comentarios se refieren a mi respuesta original, diciendo que se puede compilar Java con código nativo con GCJ.

+2

+1, genial, ¡no sabía de eso! – FrustratedWithFormsDesigner

+2

Sí, gcj es el más conocido. @ isola009: tenga en cuenta que al compilar con código nativo, probablemente trabaje con un subconjunto (posiblemente un subconjunto dramáticamente pequeño) de las * libraries * que Java normalmente tiene de forma predeterminada. Gnu's es bastante bueno, según todos los informes, pero muy por detrás del JDK actual. –

+0

Está muy por detrás de * todos * JDKS comenzando con 1.2. He encontrado muchos problemas de soporte con personas que ejecutan accidentalmente GNU classpath en lugar de Java, y todos fueron curados sin excepción desinstalando y usando Sun JDK. – EJP

6

Sí, el JIT en la JVM hace exactamente eso para usted.

De hecho, puede producir código más rápido que compilar el código de antemano, ya que puede generar código optimizado para la plataforma específica en función de cómo se usa el código en tiempo de ejecución.

La JVM siempre está involucrada, incluso si se compila un porcentaje muy alto con el código nativo, ya que se puede cargar y ejecutar el código de bytes de forma dinámica.

+10

Sí, tiene razón en que el JIT lo hace y lo hace muy bien. No es un ejecutable autónomo, pero entonces el OP no preguntaba sobre eso ... –

+2

Pareces sugerir que solo los JIT pueden hacer una optimización específica de la plataforma. Creo que es posible cuando envías bytecode. El ART compila bytecode a código nativo en la instalación, y no es un JIT. Peter, ¿tienes algún comentario sobre esto? –

+0

@JanusTroelsen ¿Tiene un enlace a este compilador? ¿Es ampliamente utilizado? ¿Fue agregado en los últimos 5 años? Sin el JIT, no puede hacer una compilación dinámica que probablemente sea más importante. –

14

Excelsior JET es un compilador de código nativo de Java a Java.

+3

Por si acaso, hay licencias libres para proyectos no comerciales. –

+1

¿cómo se compara con RoboVM? –

Cuestiones relacionadas