Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Developer experience with Spring AOT and GraalV...

Developer experience with Spring AOT and GraalVM JDK 20

This presentation introduce a brief summary how Spring team and GraalVM team join forces to give official support to AOT compilations in Spring Boot 3.

You can found information about:

1. What's GraalVM?
2. What's Spring AOT?
3. Spring AOT engine architecture
4. Features implemented
5. Comparison with Micronaut, Quarkus and Helidon AOT implementations.

Carlos Zela Bueno

September 15, 2023
Tweet

More Decks by Carlos Zela Bueno

Other Decks in Programming

Transcript

  1. Potencie su experiencia de desarrollador con Spring AOT & GraalVM

    Carlos Zela Software Engineer & Cloud Architect @c_zela
  2. Carlos Zela Bueno Cloud Architect Senior software engineer Oracle Knowledge

    Champions Miembro de @PeruJUG @c_zela https://github.com/czelabueno https://www.linkedin.com/in/czelabueno https://www.threads.net/@c.zelabueno
  3. ¿Porque construir imágenes nativas? Startup instantáneo Milisegundos en lugar de

    segundos con la JVM Máximo rendimiento Alto throughput disponible inmediatamente. Bajo uso de recursos Huella reducida Superficie de ataque reducida Cerrado para dependencias con reflexión explícita y serialización Empaquetado compacto Contenedor pequeño fácil de implementar Soportado por Frameworks Los frameworks java más populares proporcionan soporte de primera clase Compatible con plataformas en la nube Los SDK de las principales plataformas en la nube como Aws, Azure, GCP, OCI integran y admiten GraalVM @c_zela
  4. Principales diferencias con JVM El hecho de que las imágenes

    nativas de GraalVM se produzcan antes de tiempo significa que existen algunas diferencias clave entre las aplicaciones nativas y las basadas en JVM. Las principales diferencias son: • El análisis estático de la aplicación se realiza en tiempo de compilación desde el main entry point. • GraalVM no conoce directamente los elementos dinámicos de su código y debe informarse sobre la reflexión, los recursos, la serialización y los proxies dinámicos.. • La ruta de clases de la aplicación se fija en tiempo de compilación y no se puede cambiar. • No hay carga de clases Lazy, todo lo enviado en los ejecutables se cargará en la memoria al iniciar. @c_zela Fuente: https://docs.spring.io/spring-boot/docs/current/reference/html/native-image.html#native-image.introducing- graalvm-native-images.key-differences-with-jvm-deployments
  5. Soporte nativo oficial desde Spring Boot 3 Spring Boot 3

    introduce soporte oficial para compilar aplicaciones a ejecutables nativos y reemplaza el proyecto experimental de Spring Native Java 17+, GraalVM 22.3+, Built into Spring Boot Soporte de biblioteca más amplio basado en metadatos de accesibilidad de GraalVM RuntimeHints API, @RegisterReflections y más @c_zela
  6. Spring Ahead-of-time (AOT) y descripción general del soporte nativo Fuente:

    https://spring.io/blog/2021/12/09/new-aot-engine-brings-spring-native-to-the-next-level Reachability metadata repository @c_zela
  7. Desarrolle aplicaciones java nativas en la nube eficientes, más seguras

    y altamente escalables Desarrollar Soporte de plugins de Java e IDE Construir Maven & Gradle Prueba Junit Platform, Jupiter Depurar GDB Observabilidad Actuator / Prometheus Package Imagen nativa dentro de imágenes de contenedores ligeros. Deploy Servicios Serverless en la nube y clúster de Kubernetes @c_zela
  8. Adopcion de Java Frameworks: • Maven y Gradle • Spring

    AOT engine • Testing AOT usando -Dspring.aot.enabled=true • Incluye JUnit TestEngine • Build ni usando Buildpacks • Custom Hints usando @ImportRuntimeHints • Maven y Gradle • Build ni usando Docker • Micronaut @annotations para @TypeHint y @ReflectionConfig • Compatible con picocli • aot-jar.properties • aot-native-image.properties • Maven y Gradle • Soporte para aplicaciones Helidon SP y Helidon MP. • Java 17+ • Build ni usando docker • Maven y Gradle • Soporte con Mandrel or GraalVM • Build ni usando Docker y Podman. • Testing usando @NativeImageTest y @QuarkusIntegrationTest. • No requiere GraalVM (solo linux) • Graal config desde application.properties @c_zela
  9. El future de GraalVM GraalWasm – Una implementacion de WebAssembly

    Mayor velocidad en la construccion de imagenes nativas. Mas funciones con Machine Learning. Adopcion de mas implementaciones de GC. Adopcion mas rapida de Java GA features. Oracle GraalVM Container Images @c_zela