为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星coding 2021-09-12 15:48:41
使用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"));
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

JOL这很容易(但我不完全确定这是你想要的):


String left = "Jörn"; 

System.out.println(GraphLayout.parseInstance(left).totalSize()); // 48 bytes


String right = "foobar";

System.out.println(GraphLayout.parseInstance(right).totalSize()); // 48 bytes


String 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";

}


查看完整回答
反对 回复 2021-09-12
  • 1 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信