2 votes

Taille des instances de classe dans Android

Je suis en train d'implémenter un code de traitement d'image pour Android. Je suis conscient des limites de mémoire et je suis heureux de coder dans ces limites. Cependant, je ne trouve aucune documentation qui me permette de calculer le nombre d'octets utilisés pour chaque instance d'une classe donnée que je pourrais vouloir instancier (sur le tas).

Je suis un programmeur C++ expérimenté et je suis donc relativement compétent pour résoudre les problèmes de dimensionnement des structures/classes pour mon code C++ (en tenant compte de la largeur du chemin de données du processeur, des problèmes d'alignement de la plate-forme, etc.) Je sais que Java en général se situe à un niveau d'abstraction plus élevé et que je ne suis donc pas en mesure de garantir une utilisation particulière de la mémoire pour une VM Java générale. Cependant, étant donné qu'Android fonctionne sur une VM différente et que les développeurs sont soumis à de fortes contraintes de mémoire : Je suppose qu'il peut y avoir un ensemble de règles relativement déterministes pour déterminer la taille d'une instance d'objet donnée, compte tenu de la connaissance des membres.

Quelqu'un connaît-il ces règles ?

Merci !

Alex

2voto

Jesse Wilson Points 8455

La surcharge mémoire de Dalvikvm est cohérente avec d'autres VM 32 bits grand public, dont HotSpot.

L'overhead de base pour chaque objet dans le dalvikvm est de deux mots de 32 bits. A cela, il faut ajouter deux mots pour chaque champ long ou double, et un mot pour chaque autre champ. Les champs statiques ne comptent pas dans ce total.

Il peut y avoir une surcharge supplémentaire si vous exercez l'identité hashCode en appelant une fonction non surchargé [Objet.hashCode()](http://developer.android.com/reference/java/lang/Object.html#hashCode()) o System.identityHashCode() .

Et il y a une surcharge de mémoire supplémentaire si vous synchronisez sur l'objet.

0voto

kohlerm Points 1672

Comme Jesse l'a souligné, la disposition est très similaire à celle de la VM HotSpot. Les règles pour Hotspot 32 bit peuvent être trouvées ici : http://kohlerm.blogspot.com/2008/12/how-much-memory-is-used-by-my-java.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X