Sto imparando sulla conversione del codice sorgente in codice macchina tramite i quadri .NET
e JRE
. Per iniziare ho fatto qualche ricerca confrontando i due processi e creato this diagram. Ho bisogno di aiuto per criticare la sua correttezza e, soprattutto, aggiungere le cose serie che ho perso per capire meglio il percorso di compilazione.In che modo Java Runtime Environment si confronta con il framework .NET in termini di processo di compilazione?
risposta
Sia .NET e Java compilare fino a bytecode, che è un linguaggio intermedio, che contiene le istruzioni per una macchina virtuale. Non è un codice macchina perché non può essere eseguito direttamente su una macchina fisica. Cosa succede invece (almeno oggi, Java ha una storia più oscura a questo riguardo) è che in fase di esecuzione viene eseguito un compilatore just-in-time che traduce le istruzioni della VM in codice nativo che viene poi eseguito direttamente. Questo ha un grande vantaggio nella performance solo interpretandolo.
Si differenziano un po 'in questo senso. Su ^H^H L'implementazione Java di Oracle utilizza un intelligente mix di interpretazione, misurazione e JIT che compila solo le parti che sono pesantemente utilizzate e interpretano diversamente. Ciò serve a ridurre l'impatto iniziale del compilatore JIT (che deve essere eseguito in anticipo altrimenti, allungando il tempo di avvio del processo) pur consentendo buone prestazioni laddove necessario. .NET d'altra parte sempre JIT-compila tutto il codice che viene usato (il codice non utilizzato non è compilato, però).
Come per una domanda che hai citato nei tuoi commenti: Sì, il CLR e la JVM sono le piattaforme su cui tali programmi sono eseguiti. Anche una macchina virtuale è una macchina, solo meno hardware-y. Entrambi sono strettamente integrati con un framework corrispondente, la Base Class Library per .NET e la libreria di classi Java per Java. Quelli sono quadri.
Potresti spiegare cosa intendi "In .NET un assembly è l'unità di compilazione"? – jesterII
Quello che vedi in Visual Studio in un singolo progetto viene compilato in un unico file '.exe' o' .dll' - l'assembly risultante. L'unità di compilazione si riferisce alla più piccola unità compilabile che diventa rilevante se si desidera eseguire la ricompilazione parziale, ad esempio. In Java dovresti semplicemente ricompilare le classi che sono cambiate, in .NET dovresti ricompilare un intero progetto. Intendiamoci, la differenza è trascurabile per la maggior parte dei casi - i compilatori per entrambe le piattaforme sono incredibilmente veloci, specialmente rispetto a C++. – Joey
+1 per la ricompilazione di .class Java. Non l'ho mai realizzato, ma dopo aver guardato la cartella obj, apparentemente .NET non separa il risultato dell'oggetto per ogni classe. Si possono separare le classi in librerie per ridurre la ricompilazione, ma Java separa esplicitamente ogni classe. – Martheen
- 1. In che modo javafx si confronta per oscillare in termini di funzionalità per Griffon 1.2?
- 2. In che modo il runtime .NET sposta la memoria?
- 3. In che modo .NET definisce un'interfaccia architettonica di processo?
- 4. In che modo lo sviluppo di iPhone si confronta con lo sviluppo di Symbian?
- 5. Impossibile trovare Java Runtime Environment Says ArgoUML
- 6. È possibile compilare C# in modo che non abbia bisogno di .NET Framework in fase di runtime?
- 7. java classloader e compilazione runtime
- 8. In che modo Reactive Framework (Rx) si riferisce a Google Task in .NET 4?
- 9. Come posso fare in modo che Entity Framework Type Provider utilizzi il file di configurazione runtime?
- 10. Processo di fork con CC .NET
- 11. Spring Framework in termini semplici
- 12. In che modo gtest confronta i valori in due matrici?
- 13. Fare in modo che Java runtime ignori serialVersionUIDs?
- 14. Come si confronta ironpython con altri linguaggi .net?
- 15. predefinito di .NET Runtime versione
- 16. Come viene eseguita la raccolta dei dati inutili in Java e come si confronta con .net?
- 17. In che modo .NET framework alloca memoria per OutOfMemoryException?
- 18. In che modo Perl confronta le stringhe sotto il cofano?
- 19. Qual è il vantaggio del GC di runtime su ARC in fase di compilazione?
- 20. Come si confronta Tir con altri framework web Lua?
- 21. Come si confronta il ridimensionamento di PostgreSQL con MongoDB?
- 22. Cosa si usa per un processo di compilazione complesso?
- 23. Come fare in modo che PyCharm si interrompa con l'avviso di runtime?
- 24. Avvio di un processo in Java?
- 25. L'espressione regolare Java offre vantaggi in termini di prestazioni?
- 26. Perché il DLL di .NET Framework blocca?
- 27. In che modo la distribuzione di applicazioni .NET è paragonabile alla distribuzione di applicazioni Web Java?
- 28. Fondazione Sharepoint 2010 con .Net Framework 4.0
- 29. SMO in .Net Framework 4.0
- 30. Come arrestare .NET Common Language Runtime (CLR) in puro .net
Cosa intendi con "assemblatore" lì? Come sembra ora, non è sbagliato: CLR/JVM non genera assembly ma invece dirige il codice macchina. Almeno la JVM (non credo che CLR) possa generare assembly come sottoprodotto, ma questo è appena necessario. – Voo
@Voo, per assemblatore intendo un programma che converte l'assembly leggibile da un utente in codice macchina che l'architettura della cpu può comprendere. Vedo che questo potrebbe essere completamente ridondante nel processo. – jesterII
@EJP, Voo sta dicendo che JVM crea codice macchina, non il compilatore Java che genera codice byte. – jesterII