Plataforma Java vs .NET – Modelos de Compilação e Execução
Gabarito: letra A. A principal diferença entre os ambientes de execução de Java (até a versão 8 LTS) e .NET reside no formato do código intermediário e na máquina virtual que o executa. Java compila para bytecode executado pela JVM; .NET compila para CIL (Common Intermediate Language) executado pelo CLR (Common Language Runtime).
Critério | Java (até versão 8 LTS) | .NET |
|---|
Código intermediário | Bytecode | CIL (Common Intermediate Language) |
Ambiente de execução | JVM (Java Virtual Machine) | CLR (Common Language Runtime) |
Modelo de execução | Interpretado + JIT | Compilado JIT |
Suporte a múltiplas linguagens | Sim (Kotlin, Scala, etc.) | Sim (C#, VB.NET, F#, etc.) |
Multiplataforma nativa | Sim (desde o início) | Originalmente apenas Windows; multiplataforma a partir do .NET Core |
Alternativa A — ✅ Correta ⟵ GABARITO
Descreve corretamente os dois modelos: Java gera bytecode interpretado/compilado pela JVM, enquanto .NET gera CIL gerenciado pelo CLR. Ambas as plataformas utilizam uma camada de abstração para garantir portabilidade, mas com implementações diferentes.
Alternativa B — ❌ Incorreta
Afirma que .NET compila diretamente para código nativo e que Java 8 é sempre interpretado. Na verdade, tanto a JVM (com compilação JIT) quanto o CLR utilizam compilação just-in-time para melhorar performance. Java 8 também pode compilar bytecode para nativo em tempo de execução, não sendo puramente interpretado.
Alternativa C — ❌ Incorreta
Inverte a realidade: a JVM foi projetada para ser multiplataforma desde o início (Windows, Linux, macOS), enquanto o .NET original era restrito ao Windows. Apenas com o .NET Core (atual .NET) é que se tornou verdadeiramente multiplataforma. A JVM não é exclusiva do Windows.
Alternativa D — ❌ Incorreta
Erro duplo: o ambiente .NET suporta várias linguagens (C#, VB.NET, F#, etc.), não apenas C#. Já o ecossistema Java também permite outras linguagens (Kotlin, Scala, Groovy) que rodam na JVM, mas a afirmação de que .NET está restrito ao C# é falsa.
Alternativa E — ❌ Incorreta
Afirma que bytecode e CIL são funcionalmente idênticos e as máquinas virtuais são concorrentes da mesma especificação. Embora ambos sejam linguagens intermediárias, são especificações diferentes, com conjuntos de instruções e implementações distintas (JVM vs CLR). Não são idênticos nem convergem para a mesma especificação.
🎯 Pegadinha: A alternativa E tenta confundir o candidato ao sugerir que bytecode e CIL são a mesma coisa, quando na verdade são formatos intermediários de plataformas diferentes. Lembre-se: cada plataforma tem seu próprio formato e sua própria máquina virtual, com arquiteturas independentes.
Gabarito: letra A.