En Java, tout accès à un tableau est soumis à un test pour savoir si l'index est dans les limites du tableau, ce qui rajoute une opération par accès par rapport à C ou C++ par défaut.
Ce comportement peut être modifié avec l'opiton -fno-store-check de GCJ, tout comme il existe un patch de GCC (bounds-checking patch) qui permet de vérifier les limites d'un tableau en C ou C++.
Ensuite, en Java, on ne peut pas allouer un tableau dans le stack, il faut absolument passer par le heap, ce qui ralentit l'allocation ainsi que les accès.
Les tableaux en Java sont donc plus lents qu'en C/C++ mais c'est bien connu et le développeur qui veut de la perf les évite. Pour d'autres usages, la vérification des limites est bienvenue car c'est une cause majeure de bugs en C/C++.
C'est idiot de parler d'erreur de conception ici, Java se veut plus "sûr", donc c'est plus lent, puisque il y a plus d'opérations à exécuter. C'est mieux que de se retrouver dans une zone mémoire indéfinie et de faire exploser son système.
Et C#, il ne vérifie pas les limites des tableaux?
[^] # Re: Nécessité de Java?
Posté par k. stephane . En réponse à la dépêche Accord entre la FSF et les développeurs OpenOffice au sujet de l'utilisation de Java. Évalué à 1.
Ce comportement peut être modifié avec l'opiton -fno-store-check de GCJ, tout comme il existe un patch de GCC (bounds-checking patch) qui permet de vérifier les limites d'un tableau en C ou C++.
Ensuite, en Java, on ne peut pas allouer un tableau dans le stack, il faut absolument passer par le heap, ce qui ralentit l'allocation ainsi que les accès.
Les tableaux en Java sont donc plus lents qu'en C/C++ mais c'est bien connu et le développeur qui veut de la perf les évite. Pour d'autres usages, la vérification des limites est bienvenue car c'est une cause majeure de bugs en C/C++.
C'est idiot de parler d'erreur de conception ici, Java se veut plus "sûr", donc c'est plus lent, puisque il y a plus d'opérations à exécuter. C'est mieux que de se retrouver dans une zone mémoire indéfinie et de faire exploser son système.
Et C#, il ne vérifie pas les limites des tableaux?