我有一个Java对象,其中包含一个字符串。我想知道字符串的内存使用情况。我试图优化我的程序的内存使用情况,应用程序将拥有大约10000个这样的对象。对于像"Hello World"这样的字符串,它的内存使用情况会是什么样的?
Java使用每个字符两个字节*,因此您需要将字符数乘以二,以得到大致的近似值。除了存储“有效负载”外,您还需要考虑分配给字符串引用的空间,这通常等于目标体系结构上指针的大小,还需要为字符串长度分配空间,它是一个int
,以及为缓存哈希码分配空间,这又是一个int
。
由于"Hello World"有11个字符,因此我估计其在具有32位指针的计算机上的大小为2*11+4+4+4=34个字节,或者在具有64位指针的计算机上的大小为2*11+8+4+4=38个字节。
注:此估计不考虑内部化字符串常量的影响。当字符串被 内部化 时,所有对内部化字符串的引用共享相同的有效负载,因此每个额外的内部化字符串实例的额外内存是一个引用的大小(即目标体系结构上的指针大小)。
-XX:+UseCompressedStrings
选项,在这种情况下,不需要UTF-16的字符串使用UTF-8编码。String s =“ Hi。”;
,但它将在所有实例之间共享,因此它不是 X 个实例的 s.length() 倍。大致上是4+实例指针大小*实例数。 - MadConan
UseCompressedStrings
会对这个计算有影响吗? - Vidya