¿Hay alguna forma de compilar desde Java a código de máquina independiente (o biblioteca) sin requerir una JVM?
¿Hay alguna forma de compilar desde Java a código de máquina independiente (o biblioteca) sin requerir una JVM?
Respuestas:
Solía haber una herramienta llamada GCJ que formaba parte de GCC, pero ha sido eliminada . Ahora, todos los enlaces en el sitio de GCC redirigen a sus equivalentes que no son de GCJ.
NB: todos los comentarios se referían a mi respuesta original que decía que puede compilar Java en código nativo con GCJ.
¡Si!
Oracle ha estado trabajando en GraalVm, que admite imágenes nativas. Consulte aquí: https://www.graalvm.org/
Imagen nativa La función de imagen nativa con GraalVM SDK ayuda a mejorar el tiempo de inicio de las aplicaciones Java y les da una huella más pequeña. Efectivamente, está convirtiendo el código de bytes que se ejecuta en la JVM (en cualquier plataforma) en código nativo para un sistema operativo / plataforma específico, que es de donde proviene el rendimiento. Utiliza optimizaciones agresivas anticipadas (AOT) para lograr un buen rendimiento.
Ver más:
Resumen
https://www.graalvm.org/docs/getting-started/#native-images
Demos: imágenes nativas para un inicio más rápido
https://www.graalvm.org/docs/examples/native-list-dir/
Detallado: 'Compilación anticipada'
https://www.graalvm.org/docs/reference-manual/aot-compilation/
Windows
solo funcionan los programas de juguetes, pero cualquier cosa más avanzada y / o cuando se usa un GUI
todavía no funciona. Twitter
probablemente use Linux
sin ninguno, GUI
pero probablemente también usen la versión comercial, mientras que yo solo probé la comunitaria. Puede funcionar para algunos casos de uso, pero Windows
las aplicaciones de escritorio Java no son una de ellas, lo que aún hace que el proyecto sea un poco decepcionante. Excelsior JET
podría hacer esto de manera confiable, pero ahora está descontinuado.
Excelsior JET es un compilador comercial de Java a código nativo. Sin embargo, se suspendió en mayo de 2019.
Sí, el JIT en la JVM hace exactamente eso por usted.
De hecho, puede producir código más rápido que compilar el código por adelantado, 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 en código nativo, ya que podría cargar y ejecutar código de bytes de forma dinámica.
Otra posibilidad sería RoboVM
. Sin embargo, sólo parece funcionar en Linux
, iOS
y Mac OS X
.
A día de hoy, el proyecto todavía parece algo vivo, contrariamente a algunas publicaciones en línea que afirman que el proyecto está muerto .