Si j'ai un objet, par exemple ...
String city = "Chicago"
et j'ai des millions d'entre eux. Disons que je prends l'octet de ces millions d'objets,
byte[] cityByte = "Chicago".getBytes()
Would octets prendre moins d'espace dans la mémoire?
edit: plus en profondeur:
J'ai plusieurs com.microsoft.azure.servicebus.Message objets. Je compte utiliser SerializationUtils de Apache Commons Lang pour obtenir le tableau d'octets de chaque objet et le stocker dans une liste.
Je pensais que si je stocke des objets 1 million de messages dans une liste, qui pourrait causer un problème. Mais si je stocke les mêmes objets que million un tableau d'octets dans une liste, je vais avoir un peu plus de mémoire disponible pour que je puisse faire d'autres choses. D'où la question.
Je JOL 1 pour déterminer la taille réelle des objets en mémoire lors de l' exécution:
import org.openjdk.jol.info.GraphLayout;
public class MainClass {
public static void main(String[] args) {
String city = "Chicago";
byte[] cityByte = "Chicago".getBytes();
System.out.println(GraphLayout.parseInstance(city).toPrintable());
System.out.println(GraphLayout.parseInstance(cityByte).toPrintable());
}
}
production:
java.lang.String@4d7e1886d object externals:
ADDRESS SIZE TYPE PATH VALUE
76ac826d8 24 java.lang.String (object)
76ac826f0 32 [C .value [C, h, i, c, a, g, o]
[B@3caeaf62d object externals:
ADDRESS SIZE TYPE PATH VALUE
76ac82738 24 [B [67, 104, 105, 99, 97, 103, 111]
Conclusion: 'chaîne' 32 octets VS 'byte []' 24 octets
PS Les résultats peuvent varier selon la version JVM et options. Essayez la même approche dans votre environnement. Exécuter à jdk_1.8.0_161 Mac OS 10.14