R3g a écrit :
Donc d'après toi, à partir de quelle taille de tableau cette methode devient intéressante ? Le cout de l'appel JNI est-il le même selon la plateforme ?
Et juste encore un petit truc : j'ai fais mes tests avec des tableau d'Integer et avec des tableaux d'int. J'aurais pensé que si la copie de références serait plus rapide, mais en fait c'est la copie d'entiers qui va plus vite ; une explication ?
|
la taille dépends de 15000 paramètres, donc c'est l'âge du capitaine. Mais en gros, si tu sais que tu va dépasser le méga, il va falloir songer à optimiser.
Concernant la copie de références ou d'entiers, les 2 font la même taille (et la bonne taille pour être copiés) donc je ne m'explique la différence que par la vérification du type de la référence avant de la stocker.
En effet, dynamiquenet, java est safe, donc il va lever un ArrayStoreException (j'ai la doc sur mon disque donc je file pas l'url) si il y a incompatibilité de type entre la référence et la destination. Cette vérification nécessite de déréférencer, d'aller chercher l'entête de l'objet et de remonter son graphe d'héritage jusqu'à avoir la réponse.
Sur des tableaux de type primitif, on vérifie le type des tableaux eux-même une fois pour toutes avant, soit ils sont identiques et on copie direct sans se faire chier, soit il sont compatibles et on choisi la politique de conversion une fois pour toutes et elle sera la même pour toutes les cases, soit c'est incompatible et on plante un pain direct.
pour répondre à -- : non, java ne copie pas les objets de sa propre initiative, c'est bien la référence qui est copiée (sémantiquement du moins, s'ils se mettent à l'arthimétique taggée c'est leur pb, pas le nôtre).
edit : typo, cleanup
edit2 : c'est cacheable la vérification de types, mais je sais pas si dans la pratique c'est caché.
Message édité par nraynaud le 02-06-2003 à 19:35:04