Ir al contenido principal

¿Cuándo empezó C# a optimizar mejor su código en el CLR? Y comparación con JAVA

 


Históricamente, el CLR ha evolucionado en varias fases:

📌 .NET Framework (2002-2019)

  • Desde su inicio en .NET 1.0 (2002), el CLR tenía un JIT sencillo, pero sin profiling dinámico avanzado como la JVM.
  • El rendimiento dependía mucho de la primera compilación JIT y no cambiaba mucho en ejecución.
  • No había recompilación en caliente ni optimización adaptativa.

📌 .NET Core (2016-2020)

  • Introdujo RyuJIT, un nuevo compilador JIT más rápido y eficiente.
  • .NET Core 2.1 (2018): Se introdujo Tiered Compilation, similar a la estrategia de HotSpot de Java.
    • Primera compilación: Rápida y sin optimizaciones.
    • Segunda compilación: Más optimizada con profiling en ejecución.
  • .NET Core 3.0 (2019): Mejoró aún más el JIT con más optimizaciones.

📌 .NET 5 y superiores (2020 - Presente)

  • Tiered Compilation mejoró aún más y ahora es habilitada por defecto.
  • Dynamic PGO (Profile-Guided Optimization) en .NET 6 (2021):
    • El CLR analiza el uso del código en ejecución y lo optimiza dinámicamente (parecido al profiling de la JVM).
  • .NET 7 y 8 (2022-2023):
    • Más mejoras en Dynamic PGO y optimización adaptativa.

3️⃣ Entonces, ¿C# tiene optimización JIT como Java?

🔹 Sí, pero empezó tarde en comparación con la JVM.
🔹 Antes de .NET Core 2.1 (2018), el JIT del CLR era más estático.
🔹 Desde .NET Core 2.1, .NET tiene optimización adaptativa, pero Java sigue siendo más agresivo en runtime.


4️⃣ ¿Hoy en día cuál es mejor en optimización en tiempo de ejecución?

  • Java sigue teniendo un JIT más maduro, con recompilaciones más avanzadas y una historia más larga de optimización en caliente.
  • .NET ha cerrado la brecha desde .NET Core 2.1 y especialmente con Dynamic PGO en .NET 6+.
  • Java tiene más optimización en ejecución, pero .NET compensa con opciones como ReadyToRun y AOT (Ahead-of-Time Compilation) para mejorar la carga inicial.

📌 Conclusión

Antes de 2018, la JVM era mucho mejor optimizando en ejecución.
Desde .NET Core 2.1, .NET empezó a mejorar con Tiered Compilation.
En .NET 6+, Dynamic PGO permite más optimización en tiempo de ejecución.
Aún así, la JVM sigue teniendo un JIT más avanzado en optimización dinámica.

Si buscas optimización en tiempo de ejecución, Java sigue siendo superior.
Si buscas optimización antes de ejecutar (AOT, R2R), .NET tiene más opciones.

Comentarios

Entradas más populares de este blog

Arquitectura N-Capas GUÍA COMPLETA .NET Core

Entendiendo la Arquitectura Limpia (Clean Architecture) en .NET: Una Guía Completa La Arquitectura Limpia, también conocida como arquitectura N-Capas, es un patrón de diseño que nos ayuda a crear aplicaciones mantenibles, testables y escalables. En este artículo, exploraremos en detalle cómo implementar esta arquitectura en un proyecto .NET. Si quieres entenderlo más fácil y con código, te dejo este otro artículo:   Arquitectura Limpia explicado con patitos 🐤 ¿Qué es la Arquitectura Limpia? La Arquitectura Limpia es un conjunto de principios de diseño que nos ayuda a separar las responsabilidades en diferentes capas de nuestra aplicación. Cada capa tiene una responsabilidad específica y se comunica con las otras capas a través de interfaces bien definidas. Estructura del Proyecto Una típica estructura de proyecto en Arquitectura Limpia se ve así: ├── Controllers/ │   └── ProductController.cs ├── Domain/ │   ├── Models/ │   └── DTOs/ ├── Repository/ │...

Archivo Application.properties en SPRING BOOT

  Guía Completa: Application.properties en Spring Boot El archivo application.properties es una pieza fundamental en aplicaciones Spring Boot, actuando como el centro de configuración para todo tu proyecto. En esta guía, exploraremos sus características principales y cómo aprovecharlo al máximo. ¿Qué es application.properties? Es un archivo de configuración que permite definir diferentes parámetros y valores para tu aplicación Spring Boot sin necesidad de modificar el código fuente. Se ubica en src/main/resources y Spring Boot lo lee automáticamente al iniciar. Configuraciones Esenciales Configuración del Servidor # Puerto del servidor server.port = 8080 # Contexto de la aplicación server.servlet.context-path = /miapp Conexión a Base de Datos # MySQL spring.datasource.url = jdbc:mysql://localhost:3306/mibasededatos spring.datasource.username = usuario spring.datasource.password = contraseña spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver JPA y Hibernat...

Conectarse a Mongo Atlas desde Compass, MongoSH y VSCode

¡Hola a todos! 👋 Hoy quiero presentarte MongoDB Atlas,  la solución gestionada en la nube para tus bases de datos MongoDB. Si estás buscando una forma sencilla y eficiente de desplegar, gestionar y escalar tus bases de datos sin preocuparte por la infraestructura subyacente, Atlas es la herramienta que necesitas. 🌐🚀 En este artículo, te guiaré a través de los pasos necesarios para configurar tu cuenta de MongoDB Atlas y conectarte desde Mongo Compass, MongoSH y tu editor Visual Code. ¡Vamos a comenzar! 💻🍃 Por cierto, Mongo Atlas en palabras sencillas es tener MongoDB en la nube administrada totalmente por ellos.  1. CREAR CUENTA Es muy sencillo, lo primero que debes hacer es crear tu cuenta en su sitio web oficial  MongoDB Atlas | Plataforma De Datos Multicloud Para Desarrolladores | MongoDB | MongoDB   Escoge gratuito ya que te dará 0.5GB de almacenamiento y RAM compartida por lo que para tus pruebas es suficiente. Sigue los pasos tipicos pasos de NEXT. 2. CREA...