《String Compact》给当前的JNI引入了一些性能问题,如何避免

问题描述 投票:0回答:1

为了尽量减少复制操作并直接访问String的字符串内容,JNI提供了GetStringCritical,它一直运行良好。然而,随着Java中“String Compact”的引入,字符串编码可以是Latin1或UTF16。在英语地区,绝大多数字符都可以使用 Latin1 表示,因此大多数 String 对象内部都使用 Latin1 存储。这在使用 GetStringCritical 时会造成尴尬的情况,因为包含的字符串将被强制转码为 UTF16,这意味着明确的复制操作。

C++端还有直接访问字符串内容的方法吗?我们真的必须求助于反射来从字符串中检索 byte[] 值吗?

java string encoding java-native-interface
1个回答
0
投票

如果 UTF-16 在 Java 堆方面是可接受的,您可以随时使用

-XX:-CompactStrings
禁用它。

© www.soinside.com 2019 - 2024. All rights reserved.