Java vs C (exécution) EDIT: code ajouté

Je viens d’écrire un programme qui trouve tous les nombres premiers avec une limite supérieure.

L’algorithme: Tamis d’Eratosthenes.

A écrit à la fois en C et en Java. La limite supérieure est 666014.

Pour une raison quelconque, C donne le résultat en plus de 2,5 secondes, alors que Java le fait en une demi-seconde.

Détails:

  • Le tableau en C est de type char

  • Le tableau en Java est de type boolean

C IDE: CodeBlocks

IDE Java: Édition IntellijIdea Community

Code C:

#include  int main() { int n = 666013; int i; int k; char a[n]; for (i = 2; i <= n; i++) a[i] = 0; for (i = 2; i <= n; i++) if ( a[i] == 0 ) { printf("%d\n", i); for (k = i + i; k <= n; k += i) a[k] = 1; } return 0; } 

Code Java:

 package primes; public class Prime { public static void main(Ssortingng[] args) { long starttime = System.nanoTime(); final int MAXN = 666013; boolean a[] = new boolean[MAXN]; for (int i = 2; i < a.length; i++) a[i] = true; for (int i = 2; i < a.length; i++) if (a[i]) { System.out.println(i); System.out.printf(""); for (int j = i + i; j < a.length; j += i) { a[j] = false; } } System.out.println(System.nanoTime() - starttime); } } 

Dernière édition: utilisé System.nanoTime () Java donne 0,35 seconde

L’algorithme C ne peut pas être plus rapide. Quelle est la raison pour laquelle Java est plus rapide ici?

Je parie que vous vous interrogez sur le temps d’exécution même si vous avez indiqué l’heure de la compilation dans l’en-tête de votre question. Si vous essayez de chronométrer la compilation, c’est vraiment une pomme d’orange, surtout si vous la faites dans des IDE au lieu d’utiliser la ligne de commande.

Si vous comparez une application Java à une application C ++, vous devez tenir compte de nombreux éléments.

  • Vous devez utiliser les mêmes types de données.
  • Vous DEVEZ vous assurer que votre code Java ne déclenche pas de boxe supplémentaire.
  • Vous devriez lire pour les deux langues et trouver comment utiliser la timer système de bas niveau la plus précise. System.currentTimeMillis () n’est pas très précis en Java, par exemple.
  • Vous devez vous assurer que votre temps est mesuré avant de le mettre en sortie, afin que les différences de sortie dans les deux langues ne soient pas mesurées dans le test.
  • Utilisez-vous la même architecture dans les deux langues? (32 ou 64 bits).

Franchement, votre évaluation dépend beaucoup du code. Sans montrer le code, les gens ne peuvent pas vous aider. Il y a beaucoup de choses que vous pouvez faire pour affecter les timings dans le code le plus simple.