Heim >Java >javaLernprogramm >Können Sprachen virtueller Maschinen Muttersprachen übertreffen: Untersuchen Sie die Leistungsunterschiede zwischen C und Java/C#?
C Native Code vs. Java/C# Virtual Machine: Leistungsunterschiede verstehen
Trotz der logischen Annahme, dass Sprachen wie Java und C#, die Da es auf virtuellen Maschinen statt auf nativem Code ausgeführt werden kann, kann es nicht mit der Geschwindigkeit von C mithalten; jüngste Fortschritte haben diese Vorstellung in Frage gestellt. Wie ist es möglich, dass eine virtuelle Maschinensprache eine Muttersprache übertrifft?
JIT vs. statische Kompilierung
Just-in-Time (JIT)-Compiler konvertieren Bytecode in nativen Code zur Laufzeit. Allerdings ist dieser Prozess mit Kosten verbunden: JIT-Compiler können im Gegensatz zu statischen Compilern, die eine vollständige native Binärdatei erstellen, nicht alle Kompilierungen auf einmal abschließen. Bei bestimmten Anwendungen übertrifft die statische Kompilierung die JIT-Kompilierung.
C-Metaprogrammierung
Die Vorlagen-Metaprogrammierung von C ermöglicht die Codeverarbeitung während der Kompilierung, was praktisch keinen Laufzeitcode zur Folge hat. Obwohl die Auswirkungen dieser Funktion auf reale Anwendungen noch nicht vollständig erkannt wurden, ist sie eine bemerkenswerte Überlegung.
Native C-Speichernutzung
C-Speichernutzung unterscheidet sich von Java/C#: Der direkte Zeigerzugriff auf den Speicher kann einen erheblichen Leistungsvorteil gegenüber Java/C#-Objekten bieten, die Garbage Collection und zusätzliche Laufzeitverarbeitung erfordern. Darüber hinaus macht die Kontrolle von C über die Speicherzuweisung und RAII die Handhabung speicherintensiver Vorgänge effizienter.
C /CLI vs. C#/VB.NET
C /CLI, die von .NET gehostete C-Implementierung, profitiert von den erweiterten Optimierungstechniken des nativen C-Compilers. Infolgedessen kann C-/CLI-Code aufgrund aggressiverer JIT-Optimierungen, die durch die strategische Codeplatzierung von C ermöglicht werden, manchmal eine bessere Leistung als der entsprechende C#-Code erbringen.
Fazit
Während C# und Java eine einfache Entwicklung und umfangreiche Bibliotheken bieten, zeichnet sich C in Situationen aus, die rohe Leistung, ultimative Leistungsoptimierung, erweiterte Sprachfunktionen und unerschütterliche Zuverlässigkeit erfordern, insbesondere für Anwendungen mit geringer Latenz und latenzempfindlichen Anwendungen.
EDIT (2011-06-06): Meine Erfahrung mit C#/.NET
Basierend auf fünf Monaten professioneller C#-Codierungserfahrung habe ich festgestellt, dass C#/Java zwar geeignet ist Wenn es darum geht, funktionsfähigen Code zu produzieren, reicht es nicht aus, wenn es um außergewöhnliche Codequalität geht. Generics, RAII und Unveränderlichkeitsbeschränkungen machen es schwierig, das gleiche Maß an Zuverlässigkeit wie C zu erreichen.
Darüber hinaus zeigt die Rückkehr zu C für kritische serverseitige Anwendungen, die eine extrem niedrige Latenz erfordern, die anhaltende Dominanz von C in Bereichen, in denen rohe Kraft und Präzision unerlässlich sind.
EDIT (22.06.2011): Einblicke von Drittanbietern
Unabhängige Studien haben die Leistungsüberlegenheit von C bei anspruchsvollen Anwendungen bestätigt. Sie verdeutlichen jedoch auch den Kompromiss zwischen der Schwierigkeit von C, Code von durchschnittlicher Qualität zu schreiben, und der Leichtigkeit, Code von hoher Qualität zu erzielen.
BEARBEITEN (20.09.2011): Andrei Alexandrescus Perspektive
Herb Sutters Zitat, das Andrei Alexandrescu zugeschrieben wird, unterstreicht die paradoxe Natur von C. Während es schwieriger ist, C-Code zu schreiben als in anderen Sprachen, ist das Schreiben von effizientem Code aufgrund der Optimierungsmöglichkeiten von C weniger schwierig.
Das obige ist der detaillierte Inhalt vonKönnen Sprachen virtueller Maschinen Muttersprachen übertreffen: Untersuchen Sie die Leistungsunterschiede zwischen C und Java/C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!