gpt4 book ai didi

java - 为什么私有(private)包 String constructor (int, int, char[]) 被移除了?

转载 作者:行者123 更新时间:2023-11-30 08:11:58 26 4
gpt4 key购买 nike

<分区>

在 Java 6 中,有一个包私有(private)构造函数来返回一个偏移量已更改的新字符串。

643     // Package private constructor which shares value array for speed.
644 String(int offset, int count, char value[]) {
645 this.value = value;
646 this.offset = offset;
647 this.count = count;
648 }

它在 Java 7 中已被标记为弃用,并在 Java 8 中被删除。我依赖于一些 API 反复调用 subSequence,直到我遇到性能问题。

深入研究代码,我看到 subSequence 在 Java 6 中使用了这个构造函数。但就目前而言,它使用另一个复制底层数组并从所需和结束的偏移量开始的构造函数,因此使其成为 O(n) 的 O(1) 操作。

替换对 subSequence 的有问题的调用将性能提高了 10 倍。

我想知道为什么要进行这样的更改。我唯一想到的是它可能会造成潜在的内存泄漏,例如:

String veryLargeString = ....;
String target = veryLargeString.substring(0, 10);
//assume I don't need anymore veryLargeString at this point

此时底层的 char 数组不能被 GC,因为它仍然被目标 String 使用。因此,您在内存中有一个大数组,但您只需要它的前 10 个值。

这是唯一好的用例还是有其他原因导致此构造函数已被删除?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com