gpt4 book ai didi

java - 对于偏移量/计数,每个字符串实例 "waste"8 个字节是否有意义?

转载 作者:搜寻专家 更新时间:2023-11-01 03:28:19 26 4
gpt4 key购买 nike

Java 中的字符串支持某些方法的结构共享,如 substring,这意味着不需要复制假定不可变的数据(这(意外地)使大型 char 数组保持 Activity 状态,这本来是 GC否则。)

此功能是通过 offsetcount 两个字段实现的,这两个字段在 Java 中 substringed 时进行相应设置。

考虑到 .NET doesn't do this并声称“如果 n 不变大,O(n) 就是 O(1)”,在满足这两个要求的情况下,稍微不同的字符串设计是否有意义?

E. G。拥有一个密封的、内存高效的通用版本的 String 是否有意义,它没有这些多余的字段和一个子类“SubString”,它只由 substring 方法返回并且有额外的字段以避免复制?

草图:

sealed class String {
val codeunits: Array[Char] = ...
def length = codeunits.length

def substring: SubString = ...

...
}

final class SubString extends String {
val offset: Int = ...
override def length = codeunits.length - offset /* and so on */

...
}

最佳答案

您的建议可以使常见情况在内存和 CPU 方面更有效率。

您可能有兴趣了解 JVM 可以在不更改代码的情况下更改此设置。 Sun/Oracle JVM 当前在字符无损地放入字节时自动使用 byte[]。

在任何情况下,它都是您希望 JVM 透明地为您做的事情,就像 -XX:+UseCompressedStrings 所做的那样。

关于java - 对于偏移量/计数,每个字符串实例 "waste"8 个字节是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446222/

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