2010-08-09 6 views
2

Je suis en train de mettre en place un code de traitement d'image pour Android. Je suis conscient des limites de la mémoire et je suis heureux de coder en leur sein. Cependant, je ne trouve aucune documentation qui me permette de déterminer combien d'octets sont 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 de tels problèmes de taille de structure/classe pour mon code C++ (en tenant compte de la largeur du chemin de données du processeur, des problèmes d'alignement de la plateforme, etc.). Je sais que Java en général est à un niveau d'abstraction plus élevé et que je ne peux pas garantir un usage particulier de la mémoire pour une machine virtuelle Java générale. Cependant, étant donné qu'android fonctionne sur une machine virtuelle différente, et étant donné que les développeurs sont fortement contraints par la 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é, étant donné la connaissance de membres.Tailles d'instances de classe sous Android

Quelqu'un connaît ces règles?

Merci!

Alex

Répondre

2

surcharge de la mémoire de Dalvikvm est compatible avec d'autres machines virtuelles 32 bits grand public, y compris HotSpot.

La surcharge de base pour chaque objet dans le dalvikvm est de deux mots de 32 bits. A ceci, vous ajoutez 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 un surdébit supplémentaire si vous utilisez le hashCode d'identité en appelant un Object.hashCode() ou un System.identityHashCode() non contrôlé.

Et il y a un surdébit de mémoire supplémentaire si vous synchronisez sur l'objet.

+0

C'est exactement ce que j'ai besoin de savoir. Merci beaucoup. –