假设我有一个类,其中包含许多用配置文件中的数据初始化的字段。Resharper等。等 通常建议使用静态只读修饰符。
我的理解是,static关键字使变量存储在堆栈中,而不是堆中。因此,我开始怀疑具有大量静态字段是否会对内存使用产生影响。我四处搜寻,而我能找到的最好的是这篇关于静态字符串的文章说(强调我):
在字符串上使用static关键字时,表示仅需要一个字符串引用,该引用只能指向一个对象。如果程序中有很多字符串值,请不要选择static关键字。
但是不幸的是,它并不能解释原因。
因此,我目前最好的猜测是,由于涉及到一个指针,因此使用static修饰符会带来性能上的提升,但您不应随意使用它们,因为这可能会给内存造成压力,因为垃圾收集器永远不会清除它们起来吗?
准确吗?
射击。那是一篇写得很差的文章。
基本上,他们想要达到的目标是一个相对简单的概念:使用static
关键字时,您只会获得一个变量,而如果省略关键字,则每个实例将获得一个变量。变量是静态的,不是字符串。
至于字符串的内存存储,所有字符串都存储在堆中,而不是堆栈中。唯一具有特殊存储的字符串称为“ interned”字符串,它们是完全不同的蠕虫病毒,根本不适用于此问题。
至于您的最后一条评论,寿命长的字符串是GC知道如何处理的完全正常的事情,一旦被删除并存活了一段时间,它们就进入了一个不会对性能产生很大影响的角落。