Performance: Java vs C#

Es gibt sicher hunderte solcher Diskussionen: "Meine Sprache ist schneller als deine!"
Ich möchte etwas Licht ins dunkel bringen, und habe deshalb einen Test gemacht. Ich habe mit Java und mit C# Primzahlen berechnet und die Zeit gemessen.
Freut euch, die beiden Sprachen sind gleich schnell:). Jedenfalls, soweit man aus so einem kleinen Beispiel schlussfolgern kann.
Zeiten für Primzahlen bis 500000 in ms:
C# Java
37618 37628
37617 37549
Zeiten für Primzahlen bis 50000 in ms:
C# Java
463 466
461 468
463 467

Quellcode von C# :
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace time
{
    class Program
    {
        static void Main(string[] args)
        {
            bool istprim = true;
            DateTime start = DateTime.Now;
            for (int i = 1; i < 50000; i++)
            {
                for (int t = 2; t < i; t++)
                {
                    if ((i % t) == 0)
                    {
                        istprim = true;
                        break;
                    }
                }
                istprim = false;
            }
            Console.WriteLine();
            DateTime ende = DateTime.Now;
            TimeSpan differenz = ende - start;
            double dif=differenz.TotalMilliseconds;
            Console.WriteLine(dif);
        }
    }
}

Quellcode von Java:
Code:
package speedtest;


public class Main {

    public static void main(String[] args) {
            boolean istprim = true;
            double start = System.currentTimeMillis();
            for (int i = 1; i < 50000; i++)
            {
                for (int t = 2; t < i; t++)
                {
                    if ((i % t) == 0)
                    {
                        istprim = true;
                        break;
                    }
                }
                istprim = false;
            }
            System.out.println();
            double ende = System.currentTimeMillis();
            double dif=ende - start;
            System.out.println(dif);
    }

}

Ich weiß, hier wird weder ein GUI aufgebaut, noch eine Datenbank durchsucht.
Immerhin zeigt das Beispiel, dass die Sprachen grundsätzlich gleichauf liegen.
Falls jemand das "Meine Sprache ist schneller als deine vermisst" kann er ja den Quellcode auf seinem Rechner ausführen und immerhin sagen "Mein Rechner ist schneller als deiner" :D
 
Da muss ich doch glatt mal in die Kerbe hauen:

Für die Bewertung der Geschwindigkeit dieser Sprachen ist die GUI aber ein Entscheidender Fakt! Auch C++ wird nicht 10-15% bessere Werte als C# erreichen wenn es um einfache Primzahlen geht -> Trotzdem ist es um ca. diesen Bereich schneller. Du kannst ja mal spaßeshalber einen Test mit 2000 Textboxen machen die "onload" 255 Zeichen nach und nach eingegeben bekommen. Mal sehen was dann schneller ist.
 
Am besten noch unterteilt nach AWT und Swing. :D
Aber im Ernst: Das Durchsuchen einer Datenbank wird wahrscheinlich auch keinen großen Unterschied geben. Bei der Abarbeitung eines SELECTs ist die Datenbank gefordert, nicht die Anwendung. Und die GUI spielt bei den meisten Anwendungen keine große Rolle in punkto Benchmarking.
Außerdem beruhen C# und Java auf der gleichen Technologie. Beide verwenden (notgedrungen) eine VM, nur heißt diese bei C# Jitter. Und wie so etwas performant implementiert wird, wissen die Experten bei Microsoft wahrscheinlich ebenso gut wie die bei SUN.
 
Mit solchen Schleifen kann man überhaupt keine Performance messen. Der CPU-Cache macht das unmöglich. Wenn man wirklich eine Messung vornehmen will, muss man sehr aufwändige und große Programme schreiben, damit der Cache nicht dazwischenfunkt. Bei jeder Zeile muss man dafür mit sehr viel Wissen über den Prozessor arbeiten.

Sprachen wie C# und Java lassen sich sehr schlecht vergleichen, da ihre Stärken und Schwächen sehr ungleichmäßig verteilt sind. Vor einiger Zeit hat die c't mal einen String-Benchmark veranstaltet, bei dem -- große Überraschung -- Delphi alle anderen weit abgehängt hat, inklusive C++. Java war nicht sonderlich gut, wenn ich mich recht entsinne.

Vor allem aber gilt: Die Performance ist bei Hochsprachen vor allem compilerabhängig, nicht sprachenabhängig.
 
Hallo,

ich bin der Meinung, dass es erstmal relativ egal ist, welche Sprache schneller ist. Jede Sprache hat ihre Stärken und ihre Schwächen. Es gibt in jeder Sprache Frameworks die langsam sind und andere die wieder schnell sind.
BSP Java: Swing relativ langsam, obwohl sich da einiges getan hat. SWT hingegen recht schnell.

Wenn man etwas Laufzeitkritisches implementieren möchte, muss man sowieso meistens auf C oder so zurückgreifen.

Vor allem aber gilt: Die Performance ist bei Hochsprachen vor allem compilerabhängig, nicht sprachenabhängig.

Dem kann ich nur zustimmen.

Gruß

Sascha
 
Sorry, ist mir klar, dass der Thread älter ist aber ich kann den OP nicht dumm sterben lassen. Sorry, der Test sagt NIX aus. Und java ist SICHER nicht so schnell wie C#. Es gibt Dinge die in C# schneller/effizienter sind und ein Paar die in java schneller sind (Optimirungen funktionieren in einer Sprache besser, andere in der Anderen). Aber grob gesagt, ist java wesentlich langsamer als C#. Tut mir leid wenn ich das sage, aber dieser Test ist ein typischer timing Test von jemandem, der keinen blassen Dunst hat wie man eine Sprache punkto Geschwindigkeit auf Herz und Nieren testet - das ist ein klassischer naiver nixsagender Test. Ich könnte jetzt auch nicht nen sehr aussagekräftigen Test schreiben, aber es braucht keinen Fachmann um zu erkennen, dass dieser Test sinnlos ist.
C# ist schon teilweise vorkompilliert (soweit ich das von anderen Leuten gehört habe), java ist von der Geschwindigkeit der VM her ein Horror.
 
Da muss ich sagen, dass du wohl Java noch nicht genutzt hast. Ich hab C Sharp zwar noch nicht genutzt, aber ich denke nicht, dass es schneller als C++ ist.

Java ist in den meisten Sachen genau so schnell wie C++. Vorkompilierte Programme haben nämlich den Nachteil, dass sie im Nachhinein nicht mehr optimiert werden können. Das ist eben bei Java nicht der Fall.
Die JVM verfügt über einen Just-In-Time-Compiler (JIT). Dieser Compiler optimiert ein Programm ständig während der Ausführung.

Wie gesagt, ich habe bisher kein C# genutzt, aber da ich denke, dass es nicht schneller als C++ ist, ist die Performance von C# und Java vergleichbar.

Gruß

Sascha
 
C# ist schon teilweise vorkompilliert (soweit ich das von anderen Leuten gehört habe), java ist von der Geschwindigkeit der VM her ein Horror.

Wenn du dich nur ansatzweise mit der Materie auskennen würdest, würdest du nicht so einen hahnebüchenen Unsinn schreiben.
Java und C# sind konzeptionell identisch. Ein Bytecode wird von einer Virtuellen Maschine interpretiert und teilweise "Just-in-Time" in nativen Code kompiliert. Java ist hier tendenziell etwas schneller, da in der Hostspot-VM einiges mehr an Forschung und Entwicklung steckt. Hier ist man eben schn etwas weiter,
 
Zurück