【问题标题】:String Literals and GC?字符串文字和GC?
【发布时间】:2017-01-20 08:07:50
【问题描述】:

假设您有一个字符串变量。

var t = "this is a test"

我们将另一个字符串重新分配给这个变量

t = "this is another test"

第一次分配的数据到底发生了什么? 框架如何处理与 GC 相关的问题?

【问题讨论】:

  • 将收集第一个分配的字符串(假设在其他地方没有将确切的文本用作另一个字符串)
  • @HenkHolterman 我正在询问字符串(实习),所以这个问题不是太宽泛,也可能不是太初学者,因为你不确定自己。我要修改标题...

标签: c# memory-management garbage-collection


【解决方案1】:

String Literals 存储在 String Intern Pool 中,并遵循与 CG 定期收集的任何其他对象不同的管理过程。

然后真正归结为字符串实习生池将如何管理“这是一个测试”文字。

最有可能的是它不会被清除并留在文字池中。但有关字符串文字池如何在下面工作的更多参考。

https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx

http://dailydotnettips.com/2012/02/12/the-string-intern-pool/

In C#, should I use string.Empty or String.Empty or "" to intitialize a string?

【讨论】:

  • GC 不会单独处理它们,字符串只是简单地存储在根位置的数据结构中。从 GC 的角度来看,它们只是始终处于活动状态;就像您存储在变量中的任何其他对象一样。 GC 没有任何关于实习字符串的特殊知识。
猜你喜欢
  • 2013-04-01
  • 2015-10-24
  • 2017-07-27
  • 1970-01-01
  • 2023-03-27
  • 2018-12-18
  • 1970-01-01
  • 2020-02-06
相关资源
最近更新 更多