java - JVM 是否能够为相同的 String 对象重用拆分结果?

标签 java optimization jvm

我的问题是针对同一个 String 对象多次调用 split 或其他 String 方法的情况。

是否有任何流行的 JVM 实现通过将结果存储在内存中以供以后重用来优化此类调用?

它可以这样工作: 由于字符串不可变的性质和字符串池表达式的存在

String resource = "A:B:C";
String[] resourceArr = resource.split(":");

每次使用时都会使用相同的字符串对象引用“A:B:C”和“:”。 JVM 可以使用这些引用匹配存储的结果,并在不执行实际解析的情况下提供它。

最佳答案

它确实以与优化 substring 相同的方式进行优化,因为 split 使用 substring:

public String substring (int start, int end) {
    if (start == 0 && end == count)
        return this;
    // NOTE last character not copied!
    // Fast range check.
    if (0 <= start && start <= end && end <= count) {
        return new String (offset + start, end - start, value);
    }
    throw new StringIndexOutOfBoundsException();
}

请注意,substring 如何返回同一字符串的 offset+start 和 end-start 之间的字符范围。换句话说,拆分后的子字符串实际上是指向由原始字符串分配的相同内存的指针。

关于java - JVM 是否能够为相同的 String 对象重用拆分结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10230525/

相关文章:

java - 有没有办法找到 TestNG 套件中禁用的所有测试?

java - 我得到一个意外的整数值

algorithm - 服务器如何避免MMO游戏流量呈二次方增长?

mysql - 搜索多个字段mysql的最快方法

java - 在/tmp/Linux 上更正 hsperfdata 的权限

JAVA nontoop/apns 证书

java - 我的课出了点问题。我是初学者

c - 在 C 中实现 strcpy 函数

java - 过多的 ORM POJO 域模型类对 Java PermGen Space 有何影响?有可用的指标吗?

java - java实际上是如何在屏幕上打印的