在Java语言中,如果我有一个字符串x
,我如何计算该字符串中的字节数?
发布于 2013-08-03 15:49:51
如果您运行的是64位引用:
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
换句话说:
sizeof(string) = 36 + string.length() * 2
在32位VM或具有压缩OOPs (-XX:+UseCompressedOops)的64位VM上,引用是4字节。因此,总数将是:
sizeof(string) = 32 + string.length() * 2
这不考虑对string对象的引用。
发布于 2010-12-08 16:51:46
根据How to convert Strings to and from UTF8 byte arrays in Java的说法
String s = "some text here";
byte[] b = s.getBytes("UTF-8");
System.out.println(b.length);
发布于 2010-12-08 17:26:20
String
实例在内存中分配一定数量的字节。也许您正在查看类似sizeof("Hello World")
的内容,它将返回数据结构本身分配的字节数?
在Java语言中,通常不需要sizeof
函数,因为我们从不分配内存来存储数据结构。我们可以查看String.java
文件进行粗略估计,我们看到一些“int”、一些引用和一个char[]
。Java language specification定义char
的范围是从0到65535,因此两个字节足以在内存中保留一个字符。但是JVM不必在2个字节中存储一个字符,它只需保证char
的实现可以保存定义范围的值。
所以sizeof
在Java语言中没有任何意义。但是,假设我们有一个很大的字符串,一个char
分配了两个字节,那么String
对象的内存占用至少是以字节为单位的2 * str.length()
。
https://stackoverflow.com/questions/4385623
复制相似问题