Comment minimiser les appels à l'opérateur new
Bonjour à tous,
Je suis un développeur C++ actuellement en train d'apprendre Java (principalement pour de la prog Android).
Ce langage est réellement génial, mais y a quelque chose que j'ai du mal à assimiler:
Je comprend bien que l'appel à l’opérateur new est moins coûteux en java qu'en C++ (même si apparemment cela dépend de la JVM) mais ce que je ne comprend pas, c'est qu'il ne soit simplement pas possible d'allouer des objets sur la pile.
Ex:
Si en C++ j'ai une structure de ce type:
Code:
1 2 3 4 5 6 7 8
| struct SVertex
{
float x;
float y;
float z;
float u;
float v;
}; |
je peux écrire cela dans une fonction:
Code:
1 2 3 4
| void fnc( )
{
SVertex vertexArray[256];
} |
l'allocation et la de-allocation n'ont alors quasiment aucun impact étant donnée que le tableau est alloué sur la pile.
Seulement en Java, je ne peux (à ma connaissance) pas faire cela, il ne me reste que l'opérateur new comme alternative:
Code:
1 2 3 4
| void fnc( )
{
SVertex[] vertexArray = new SVertex[256];
} |
Cela n'a certainement aucun impact si ce code n'est réalisé que lors du démarrage de l'appli, mais si cette fonction est appelée 200 fois par frame (dans le cas d'une appli graphique) cela doit être plus pénalisant.
Donc en somme, ma question est la suivante:
En java, somme nous obligé d'utiliser l'opérateur new pour crée des objects qui serviront de manière temporaire lors d'un phase de calcul ou autre ?
Est il possible d'écrire de nouvelles "primitives" en java (comme float ou int )
Quel sont vos conseil à ce sujet ??
Merci a vous tous !!
Cordialement,
Clément Vidal
questions d'allocation mémoire
Puisqu'on est dans les questions de coût de création d'objet, je me suis toujours demandé si, dans une boucle, il vaut mieux faire :
Code:
1 2 3 4 5
|
MaClasse monObjet;
for (i=0; i<100; i++){
monObjet = new MaClasse();
} |
plutôt que :
Code:
1 2 3 4
|
for (i=0; i<100; i++){
MaClasse monObjet = new MaClasse();
} |
en disant que MaClasse est un POJO quelconque.