Je voudrais tester combien d'octets une référence d'objet utilisée dans le Java VM que j'utilise. Savez-vous comment tester cela? P>
Merci! P>
4 Réponses :
Il peut différer de JVM à jvm mais "Tailleof pour Java" dit P>
Vous pouvez vous souvenir "Java Astuce 130: connaissez-vous votre taille de données?" Cela décrivait une technique basée sur la création d'un grand nombre d'instances de classe identiques et de mesurer soigneusement l'augmentation résultante de la taille du tas d'utilisée JVM. Le cas échéant, cette idée fonctionne très bien et je l'utiliserai en fait pour bootstrap l'approche alternative de cet article. P> blockQuote>
Remettez la question littéralement, sur la plupart des JVM, toutes les références sur les JVM 32 bits prennent 4 octets, une JVM 64 bits, une référence prend 8 octets, sauf -xx: + USECompressheoops a été utilisé, auquel cas il faut 4 -Bytes. P>
Je suppose que vous vous demandez comment savoir combien d'espace un objet occupe un objet. Vous pouvez utiliser Instrumentation (pas une matière simple), mais cela ne vous donnera qu'une profondeur peu profonde. Java a tendance à vous casser dans de nombreux objets quelque chose qui est C ++ pourrait être une structure unique, ce qui n'est pas aussi utile. P>
Cependant, si vous avez un problème de mémoire, je vous suggère de profiler de mémoire. Cela vous donnera les objets spatiaux peu profonds et profonds, utilisez-vous et vous donnera une photo dans l'ensemble du système. Ceci est souvent plus utile que vous pouvez commencer par les plus gros consommateurs et optimiser ceux comme même si vous développez Java depuis dix ans +, vous ne devinerez que le meilleur endroit où optimiser si vous avez des données difficiles. P>
Une autre façon d'obtenir la taille de l'objet Si vous ne voulez pas utiliser un profileur consiste à affecter un grand tableau et à voir la quantité de mémoire consommée, vous devez le faire plusieurs fois pour avoir une bonne idée de la taille moyenne de la taille moyenne. est. Je définirais la jeune espace très élevée pour éviter que les GC confondent vos résultats par exemple. -xx: Newsize = 1G code> p>
Celui-ci est celui que j'utilise. Je dois aimer ces références de 16 octets! Alphaworks.ibm.heapanalyzer P>
Je devine juste ici, mais pourquoi ne pas écrire un programme de 0 octets Alloc'd, qui se bouclait simplement d'établir une ligne de base, puis d'allocat 100 000 (1 million au besoin) objs du même type. La différence de taille (pourrait) être une estimation raisonnable. Java Gurus sont invités à mettre fin à cette idée ;-)
@Shelter: avec un O / S moderne, JVM et GC, les résultats sont susceptibles d'être trop granulés pour être utiles.
Les réponses que vous avez obtenues aussi loin semblent être sur la taille de l'objet. Cependant, votre question indique spécifiquement l'objet référence i> la taille. Si vous recherchez en effet une taille de référence, voir Stackoverflow.com/questions/981073/...