util - string en java




octets d'une chaîne de caractères en Java? (5)

Essaye ça :

Bytes.toBytes(x).length

En supposant que vous avez déclaré et initialisé x avant

En Java si j'ai une chaîne x comment puis-je calculer le nombre d'octets dans cette chaîne?


Il y a une méthode appelée getBytes() . Fais-en bon usage .



Si vous utilisez des références 64 bits:

sizeof(string) = 
8 + // object header used by the VM
8 + // 64-bit reference to char array (value)
8 + string.length() * 2 + // character array itself (object header + 16-bit chars)
4 + // offset integer
4 + // count integer
4 + // cached hash code

En d'autres termes:

sizeof(string) = 36 + string.length() * 2

Sur une VM 32 bits ou une VM 64 bits avec des POO compressés (-XX: + UseCompressedOops), les références sont de 4 octets. Donc, le total serait:

sizeof(string) = 32 + string.length() * 2

Cela ne prend pas en compte les références à l'objet chaîne.


Une instance String alloue une certaine quantité d'octets en mémoire. Peut-être que vous regardez quelque chose comme sizeof("Hello World") qui retournerait le nombre d'octets alloués par la structure de données elle-même?

En Java, il n'y a généralement pas besoin d'une fonction sizeof , car nous n'allouons jamais de mémoire pour stocker une structure de données. Nous pouvons jeter un oeil au fichier String.java pour une estimation approximative, et nous voyons quelques 'int', quelques références et un char[] . La spécification de langage Java définit un char compris entre 0 et 65535, deux octets suffisent donc à conserver un seul caractère en mémoire. Mais une JVM n'a pas besoin de stocker un char dans 2 octets, elle doit seulement garantir que l'implémentation de char peut contenir des valeurs de la gamme defined.

Donc sizeof n'a vraiment aucun sens en Java. Mais, en supposant que nous ayons une grande chaîne et qu'un char allouent deux octets, alors l'empreinte mémoire d'un objet String est au moins 2 * str.length() en octets.





string