27 votes

Coût du verrouillage en .NET vs Java

Je jouais avec les Perturbateurs cadre et de son port .NET plate-forme et a trouvé un cas intéressant. Peut-être que je passe à côté de quelque chose, donc je suis à la recherche de l'aide du tout-puissant de la Communauté.

        long iterations = 500*1000*1000;
        long testValue = 1;

        //.NET 4.0. Release build. Mean time - 26 secs;
        object lockObject = new object();
        Stopwatch sw = Stopwatch.StartNew();
        for (int i = 0; i < iterations; i++)
        {
            lock (lockObject)
            {
                testValue++;    
            }
        }
        sw.Stop();

        //Java 6.25. Default JVM params. Mean time - 17 secs.
        Object lock = new Object();
        long start = System.currentTimeMillis();
        for (int i = 0; i < iterations; i++)
        {
                synchronized (lock)
                {
                    testValue++;
                }
        }
        long stop = System.currentTimeMillis();

Il semble que l'acquisition du verrou dans le scénario avec un signle fil dans .Les coûts NETS de seulement 50% de plus qu'en Java. J'ai d'abord été suspect à des minuteries, mais j'ai couru le même test pour quelques temps avec des résultats autour mentionné ci-dessus des valeurs moyennes. Ensuite, j'ai été suspect à synchronisée bloc de code, mais il n'est rien de plus qu' monitorenter / monitorexit octet code d'instructions - la même chose que le verrouillage de mot-clé dans .NET. Toutes les autres idées pourquoi prendre un verrou est si cher dans l' .NET vs Java?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X