Bonjour,
J'aimerai optimiser l'exécution du traitement sur des vecteurs et matrices de complexes. La taille des vecteurs et matrices peut être très conséquente.
J'ai ainsi trois questions sur l'implémentation de ma class "MyComplex":
1) dois je utiliser un tableau de taille 2 ou plus classiquement deux doubles ?
l'idée c'est qu'avec le tableau on est sur que les deux doubles sont stockées de façon contigu en mémoire. on devrait avec le tableau gagner en temps d'accès. non?
soit:
1 2 3 4 5 6
|
public class MyComplex {
private double real;
private double imag;
...
} |
ou
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public class MyComplex {
private double[] data;
public double getReal(){
return data[0];
}
public double getImag(){
return data[1];
}
...
} |
2) Concernant ma class vector. Dans 98% du temps je connais la taille de ma matrice ou vecteur que j'utilise. Or pour me simplifier la vie j'ai utilisé dans ma class vector un
protected ArrayList<MyComplex> vect;
Serait il plus optimisé en terme de temps d'accès et de traitement d'avoir un
protected MyComplex[] vect;
?
de même que précédemment l'idée c'est qu'avec le tableau on est sur que les doubles sont stockées de façon contigu en mémoire. De plus le ArrayList peut attribuer plus de donnée que demandée. D'où une augmentation de la mémoire utilisée.
3) plus technique je pense, dans ma class "MyComplex" j'ai les méthodes mathématique pour manipuler les complexes (add, sub,..., sin, cos...). serait il plus optimisé d'avoir une class générique comme "java.lang.Math". qui possède tout ses méthodes en static pour manipuler les complexes?
J'ai entendu dire que le fait d'associer beaucoup de méthode à une class pouvait faire augmenter la représentation de cette class en mémoire. Or je peux avoir de très grosse matrices en mémoire et dans certain cas je sature ma mémoire (java en 32Bits sur machine en 64bits). Avant de passer en 64bits j'aimerai, en premier lieu, optimiser mon code.
merci d'avance pour tous vos commentaires.
Cordialement,
Sébastien.
Partager