相关疑难解决方法(0)

239
推荐指数
9
解决办法
27万
查看次数

什么是Java String interning?

什么是Java中的String Interning,何时应该使用它,为什么?

java string string-interning

219
推荐指数
5
解决办法
10万
查看次数

字符串实习真的很有用吗?

我不久前正在谈论字符串和各种语言,并且出现了字符串实习的主题.显然,Java和.NET框架会自动执行所有字符串以及多种脚本语言.从理论上讲,因为你不相同的字符串的多个副本,最终可以节省内存,这样可以节省时间,因为字符串相等比较是一个简单的指针比较,而不是一个O(N)通过串的每个字符运行.

但是我越是想到它,我越是怀疑这个概念的好处.在我看来,优势主要是理论上的:

  • 首先,要使用自动字符串实习,所有字符串必须是不可变的,这使得许多字符串处理任务比它们需要的更难.(是的,我听说过所有关于不变性的论点.这不是重点.)
  • 每次创建新字符串时,都必须根据字符串实习表检查它,这至少是O(N)操作.(编辑:.其中N是字符串的大小,表的不是大小,因为这是令人困惑的人)所以,除非字符串相等比较,新的字符串创建的比例是相当高的,这是不可能的,节省的净时间正值.
  • 如果字符串相等表使用强引用,那么当不再需要字符串时,它们将永远不会被垃圾收集,从而浪费内存.另一方面,如果表使用弱引用,则字符串类需要某种终结器来从表中删除字符串,从而减慢GC进程的速度.(这可能是相当显著,取决于字符串实习生表是如何实现的.最坏的情况下,删除从哈希表中的项目可能需要的O(N)的重建在某些情况下整个表的.)

这只是我思考实现细节的结果.有没有我错过的东西?在一般情况下,字符串实习是否实际上提供了任何显着的好处?

编辑2:好吧,显然我是在错误的前提下操作的.我正在谈话的人从未指出字符串实习对于新创建的字符串是可选的,事实上给人的印象是相反的情况是正确的.感谢Jon直接解决问题.另一个接受他的答案.

.net ruby python java string-interning

21
推荐指数
2
解决办法
3354
查看次数

标签 统计

java ×3

string ×2

string-interning ×2

.net ×1

python ×1

ruby ×1

string-literals ×1