计算(紧凑)字符串的内存使用量

使用java的紧凑字符串功能,是否有公共api来获取字符串的实际编码或内存使用情况?我可以调用包私有方法coder或私有方法isLatin1并调整计算,但两者都会导致Illegal reflective access警告。


Method isLatin1 = String.class.getDeclaredMethod("isLatin1");

isLatin1.setAccessible(true);

System.out.println((boolean)isLatin1.invoke("Jörn"));

System.out.println((boolean)isLatin1.invoke("foobar"));

System.out.println((boolean)isLatin1.invoke("\u03b1"));


繁星coding
浏览 148回答 1
1回答

明月笑刀无情

JOL这很容易(但我不完全确定这是你想要的):String left = "Jörn"; System.out.println(GraphLayout.parseInstance(left).totalSize()); // 48 bytesString right = "foobar";System.out.println(GraphLayout.parseInstance(right).totalSize()); // 48 bytesString oneMore = "\u03b1";System.out.println(GraphLayout.parseInstance(oneMore).totalSize()); // 48 bytes对于编码,没有公共 API,但您可以推断出它...private static String encoding(String s) {    char[] arr = s.toCharArray();    for (char c : arr) {        if (c >>> 8 != 0) {            return "UTF16";        }    }    return "Latin1";}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java