En C, si j'ai differentes structures de donnees qui sont petite et utilise souvent. Il est preferable d'allouer un bout de memoire pour les stocker tous. Ainsi, ils sont physiquement proche en memoire.
Hier encore, j'ai alloue un premier tableau de double entre alloc et alloc+sizeof(double)*lengthArrayDouble et un tableau de structure complexe entre alloc+sizeof(double)*lengthArrayDouble+1 et alloc+sizeof(double)*lengthArrayDouble+1 +sizeof(structcomplexe)*lengthArraystrcomplexe.
J'ai physiquement place mes deux tableaux consecutivement en memoire. Les deux structures sont utilise tout le temps et font moins qu'une ligne de cache L2. Du fait, j'ameliore l'utilisation du cache et reduit les temps de calcul.
Je ne pense pas qu'en java, tu puisse exprimer ca. Il faut faire confiance a la machine virtuelle pour construire le graphe d'access sequentiel et decider qu'est ce qu'il faut mettre a cote. La JVM pourrait faire ca, mais ca a l'air d'etre une operation super couteuse.
J'avais aussi different tableau de structures complexe C1, C2, et C3. Et je sais que les tableaux sont basiquement utiliser de facon synchroniser: si j'utilise C1[14] probablement, je vais utiliser C2[13] ou C2[11]. Du coup, c'est interessant d'entrecaller tes allocations memoire du genre pour que la memoire soit:
C1[0], C2[0], C3[0], C1[1], C2[1], C3[1], ...
et ca, ca se fait facilement en allouant un tableau de struct Aggregate {struct C1 c1; struct C2 c2; struct C3 c3;}; Avec un coup de template, tu abstrait le probleme du placement memoire.
En java, tu ne peux pas vraiment faire ca facilement a ce que j'ai vu. si tu utilise un type complexe dans une classe, tu alloue des references et probablement une fois compile tu te tape une indirection de plus et tu te repose sur la JVM pour faire tes allocations proprement. Ou alors, tu applatis la structure en copiant les champs de C1 dans aggregate. Mais c'est un peu plus moche.
C'est de ce genre de truc dont je parles. Dans plein d'appli c'est difficile a mettre en oeuvre. Mais quand tu as des applis regulieres, tu gagnes quelques pourcent de temps d'execution avec ce genre de hack.